Deploy static websites, landing pages, and prototypes instantly. Free, no account needed.
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.
Permanently deletes a deployment and its files.
Deployment hostname to delete (e.g. "happy-cat-abc1234.shipstatic.com")
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Permanently deletes a deployment and its files.
| Argument | Type | Description |
|---|---|---|
| deployment* | string | Deployment hostname to delete (e.g. "happy-cat-abc1234.shipstatic.com") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deployment"
],
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname to delete (e.g. \"happy-cat-abc1234.shipstatic.com\")"
}
}
}Get deployment details including URL, status, file count, size, labels, and password protection state.
| Argument | Type | Description |
|---|---|---|
| deployment* | string | Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Returned by deployments_upload or deployments_list. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deployment"
],
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Returned by deployments_upload or deployments_list."
}
}
}List all deployments with their URLs, status, labels, and password protection state. The response's `cursor` is null on the last page; pass it back as `cursor` to fetch the next.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of items to return in one page. Omit for the server default. |
| cursor | string | Opaque position from the previous response's `cursor` field; omit for the first page. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Maximum number of items to return in one page. Omit for the server default."
},
"cursor": {
"type": "string",
"description": "Opaque position from the previous response's `cursor` field; omit for the first page."
}
}
}Update deployment labels. Replaces all existing labels.
| Argument | Type | Description |
|---|---|---|
| labels* | array | Labels to set. Replaces all existing labels. Pass empty array to clear. |
| deployment* | string | Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Use deployments_list to find deployments. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deployment",
"labels"
],
"properties": {
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels to set. Replaces all existing labels. Pass empty array to clear."
},
"deployment": {
"type": "string",
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Use deployments_list to find deployments."
}
}
}Deploy a static site to a live URL: free, no account or API key required. **File content is plain text by default.** Pass HTML/CSS/JS/JSON/SVG/etc. directly in each file's `content` as a regular string. Only set `encoding: "base64"` per-file for binary content (images, fonts) — do not base64-encode text. Returns the live URL. Without a connected account, the response also includes a one-time claim URL, and the site expires in 3 days unless claimed. Pass `password` to make the site private.
| Argument | Type | Description |
|---|---|---|
| ttl | number | Seconds until this deployment expires and the platform reclaims it; omit for one that never does. Only for authenticated deploys — an anonymous deployment already expires on the platform's schedule, and a requested ttl on one is refused. A deployment carrying a ttl cannot be linked to any domain: deploy without one if the site needs a domain. |
| files* | array | Files that make up the site. The site root is implied by these paths. |
| labels | array | Labels for organizing deployments (e.g. ["env:production", "v1.2"]). Each is a word, or a key and a value split by one ":". Lowercase, 3-63 chars, allows . _ - inside a word. Up to 10. |
| password | string | Optional password to gate the deployment behind an unlock prompt (6–128 characters; whitespace significant). Visitors must enter this password before viewing the site, including on any custom domains pointing at it. |
| idempotencyKey | string | Makes this deploy replayable instead of repeatable. A deploy is not naturally idempotent: if a call times out you cannot tell "it never landed" from "it landed and the response was lost", and retrying creates a second deployment. Send the same key on the retry and you get back the deployment the first try made, if it went live in the last 24 hours. A key works only within the account that sent it: without an account it is ignored, and a retry deploys again. Key the ATTEMPT (a run id, a commit sha, a uuid minted before the first try), never one minted fresh on each retry, which would defeat the point. |
Permanently deletes a domain.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name to delete (e.g. "www.example.com") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name to delete (e.g. \"www.example.com\")"
}
}
}Returns the DNS provider recorded for the domain, if known (e.g. Cloudflare, Namecheap): where its DNS records are configured. Custom domains only, and only while the domain is unverified; once its DNS is right there is nothing left to locate.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name (e.g. "www.example.com"). Must be a domain previously created with domains_set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name (e.g. \"www.example.com\"). Must be a domain previously created with domains_set."
}
}
}Get domain details including URL, linked deployment, labels, and `status`: the one word saying what the domain needs from its owner (`unverified`, `unlinked`, `live`, `paused`).
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name (e.g. "www.example.com"). Use domains_list to find names. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name (e.g. \"www.example.com\"). Use domains_list to find names."
}
}
}List all domains with their URLs, linked deployment, and `status`. The response's `cursor` is null on the last page; pass it back as `cursor` to fetch the next.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of items to return in one page. Omit for the server default. |
| cursor | string | Opaque position from the previous response's `cursor` field; omit for the first page. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Maximum number of items to return in one page. Omit for the server default."
},
"cursor": {
"type": "string",
"description": "Opaque position from the previous response's `cursor` field; omit for the first page."
}
}
}Returns the DNS records to configure at the domain's DNS provider. Call after domains_set. Custom domains only: a ShipStatic domain has no records to configure.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name. Must be a domain previously created with domains_set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name. Must be a domain previously created with domains_set."
}
}
}Create or update a domain: a ShipStatic domain (e.g. "yourname.shipstatic.com"), live as soon as a deployment is linked, or a custom domain (e.g. "www.example.com"), which needs DNS records first. Can reserve a name (omit deployment), link it to a deployment, switch deployments, or update labels. For a custom domain, domains_records then returns the DNS records to configure.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name: a ShipStatic domain (e.g. "yourname.shipstatic.com") or a custom domain (e.g. "www.example.com") |
| labels | array | Labels for organizing domains (e.g. ["production"]). |
| deployment | string | Deployment to serve on this domain (e.g. "happy-cat-abc1234.shipstatic.com"). Omit to reserve the domain without linking. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name: a ShipStatic domain (e.g. \"yourname.shipstatic.com\") or a custom domain (e.g. \"www.example.com\")"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels for organizing domains (e.g. [\"production\"])."
},
"deployment": {
"type": "string",
"description": "Deployment to serve on this domain (e.g. \"happy-cat-abc1234.shipstatic.com\"). Omit to reserve the domain without linking."
}
}
}Returns a shareable DNS setup URL that needs no API key, for whoever manages the domain's DNS. Custom domains only, and only while the domain is unverified; a verified domain has no setup left to share.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name to generate a share link for. Must be a domain previously created with domains_set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name to generate a share link for. Must be a domain previously created with domains_set."
}
}
}Check if a domain name is valid and available before creating it. Returns the normalized form and availability.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name to check (e.g. "yourname.shipstatic.com" or "www.example.com"). Call before domains_set to check availability. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name to check (e.g. \"yourname.shipstatic.com\" or \"www.example.com\"). Call before domains_set to check availability."
}
}
}Trigger DNS verification for a custom domain. Call after the user has configured DNS records from domains_records. Custom domains only, and refused once the domain is verified: read domains_get instead. Verification is asynchronous: read the domain again with domains_get to learn the verdict, since its `status` has not moved yet when this returns. A verified domain serves nothing until a deployment is linked with domains_set.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name to verify DNS for. Must be a domain previously created with domains_set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name to verify DNS for. Must be a domain previously created with domains_set."
}
}
}Returns your email and name, and the account's plan, usage and caps.
No arguments.
{
"type": "object",
"properties": {}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"files"
],
"properties": {
"ttl": {
"type": "number",
"description": "Seconds until this deployment expires and the platform reclaims it; omit for one that never does. Only for authenticated deploys — an anonymous deployment already expires on the platform's schedule, and a requested ttl on one is refused. A deployment carrying a ttl cannot be linked to any domain: deploy without one if the site needs a domain."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"description": "Relative path within the site (e.g. \"index.html\", \"assets/app.css\"). No leading slash; no parent-folder wrapping."
},
"content": {
"type": "string",
"description": "File content as a plain text string. For HTML, CSS, JS, JSON, SVG, plain text — pass directly with no encoding step. For binary files (images, fonts) ONLY, set this entry's `encoding: \"base64\"` and pass base64-encoded bytes."
},
"encoding": {
"enum": [
"utf-8",
"base64"
],
"type": "string",
"description": "Defaults to `\"utf-8\"` (raw text). Set to `\"base64\"` ONLY for binary files. Never base64-encode text content — pass it as a plain string."
}
}
},
"description": "Files that make up the site. The site root is implied by these paths."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels for organizing deployments (e.g. [\"env:production\", \"v1.2\"]). Each is a word, or a key and a value split by one \":\". Lowercase, 3-63 chars, allows . _ - inside a word. Up to 10."
},
"password": {
"type": "string",
"description": "Optional password to gate the deployment behind an unlock prompt (6–128 characters; whitespace significant). Visitors must enter this password before viewing the site, including on any custom domains pointing at it."
},
"idempotencyKey": {
"type": "string",
"description": "Makes this deploy replayable instead of repeatable. A deploy is not naturally idempotent: if a call times out you cannot tell \"it never landed\" from \"it landed and the response was lost\", and retrying creates a second deployment. Send the same key on the retry and you get back the deployment the first try made, if it went live in the last 24 hours. A key works only within the account that sent it: without an account it is ignored, and a retry deploys again. Key the ATTEMPT (a run id, a commit sha, a uuid minted before the first try), never one minted fresh on each retry, which would defeat the point."
}
}
}