Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_upload"
⟨170 unchanged words⟩ Send the same key on the retry andtheyouoriginalget back the deploymentisthereplayedfirstinsteadtry(withinmade, if it went live in the last 24hours).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.Only for a connected account: without one the key is ignored and a retry deploys again.","type":"string"},"labels":{ ⟨148 unchanged words⟩
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_upload"
⟨238 unchanged words⟩ :"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-253-63 chars, allows . _ -separators.inside a word. Up to 10.","items":{"type" ⟨105 unchanged words⟩
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_upload", "domains_set" and "domains_validate"
⟨341 unchanged words⟩ deployment carrying a ttl cannot be linked toa customany domain: deploy without one if the site ⟨9 unchanged words⟩
Connect CustomSet Domain
Changed the definition of "whoami"
⟨10 unchanged words⟩ ":"What the account is allowed to hold: the,sameunderkeysusage'sascapusagekeys, so the pair divides. A pending invitation takes a member place, so it counts against members.","properties":{"customDomains":{"description": ⟨26 unchanged words⟩ :"integer"},"members":{"description":"MembersMemberofplaces: as caps, how many people
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "domains_get", "domains_list", "domains_records" and 1 more
⟨249 unchanged words⟩ required record. The diagnostic under \"unverified\";platformShipStatic domains are born verified. One of: pending, ⟨77 unchanged words⟩
⟨280 unchanged words⟩ required record. The diagnostic under \"unverified\";platformShipStatic domains are born verified. One of: pending, ⟨84 unchanged words⟩
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_upload", "domains_dns", "domains_records" and 2 more
⟨210 unchanged words⟩ on each retry, which would defeat the point. Only for a connected account: without one the key is ignored and a retry deploys again.","type":"string"},"labels":{ ⟨130 unchanged words⟩
⟨12 unchanged words⟩ 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.
Changed the definition of "whoami"
Returnsthe account'syour email,and name, and the account's plan,currentusage andplancaps.
Changed the definition of "whoami"
⟨52 unchanged words⟩ "minimum":0,"type":"integer"},"platformDomainsmembers":{"description":"NamesMemberschosenofunderthe account, theplatform'sownerownincluded;suffix,ae.g.pending\"my-app.shipstatic.com\".invitation is not one.
Changed the definition of "domains_get", "domains_list" and "domains_set"
⟨216 unchanged words⟩ DNS verification has got: \"pending\" isnotherequiredsite'srecordCNAME not pointing here, \"partial\" issomeaofwwwthemdomain's CNAME pointing here without its apex A record (the redirect), \"verified\" isall.every required record. The diagnostic under \"unverified\"; platform domains ⟨83 unchanged words⟩
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "whoami"
⟨128 unchanged words⟩ "]},"plan":{"description":"Thetierplan the accountstandsisat.on. One of: free, pro, team, scale ⟨103 unchanged words⟩
Changed the definition of "deployments_get", "deployments_list", "deployments_set" and 7 more
⟨208 unchanged words⟩ ,"type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as ⟨19 unchanged words⟩ . Null on deployments older than the tag.","type":["string","null"]}},"required":["deployment","url", ⟨12 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page; null on the last page. The whole has-more signal."
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "domains_get", "domains_list", "domains_set" and 1 more
Get domain details including URL, linked deployment,verification statuslabels, andlabels.`status`: the one word saying what the domain needs from its owner (`unverified`, `unlinked`, `live`, `paused`).
⟨108 unchanged words⟩ "minimum":0,"type":"integer"},"paused":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."},"status":{"description":"What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNSverification
Changed the definition of "domains_verify"
⟨20 unchanged words⟩ — the domain status updates once DNS propagates. A verified domain serves nothing until a deployment is linked with domains_set.
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_get", "deployments_list", "deployments_set" and 2 more
⟨126 unchanged words⟩ description":"Full URL to the deployment screenshot.CapturedRenderedasynchronouslyonafterthedeploy;first request for it, so the URL is returned immediatelybutand theimagefirstmayrequesttaketakes a fewseconds
Authorization not required, issuer https://api.shipstatic.com/auth
Authorization not required, issuer https://api.shipstatic.com/auth
Changed the definition of "deployments_delete", "deployments_get", "deployments_list" and 12 more
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"deployment":{"description":"The deployment hostname that was marked for removal.","type":"string"},"status":{"description":"The state the deployment is in while background cleanup runs. One of: pending, success, failed, deleting.","type":"string"}},"required":["deployment","status"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"config":{"description":"True if the deployment includes a ship.json routing config.","type":"boolean"},"created":{"description":"Unix timestamp (seconds) when the deployment was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"description":"Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".","type":"string"},"expires":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."},"files":{"description":"Number of files in the deployment.","maximum":9007199254740991,"minimum":0,"type":"integer"},"labels":{"description":"Labels attached to the deployment; empty when none.","items":{"type":"string"},"type":"array"},"password":{"description":"True if the deployment is password-protected.","type":"boolean"},"screenshot":{"description":"Full URL to the deployment screenshot. Captured asynchronously after deploy; the URL is returned immediately but the image may take a few seconds to become available.","format":"uri","type":"string"},"size":{"description":"Total deployment size in bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.","type":"string"},"url":{"description":"Full URL to the live deployment.","format":"uri","type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag."}},"required":["deployment","url","files","size","status","config","password","labels","via","created","expires","screenshot"],"type":"object"}Changed the definition of "deployments_delete", "deployments_get", "deployments_list" and 12 more
Permanentlydeletedeletes a deployment and its files.You MUST confirm with the user before calling this tool, referencing the deployment.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Get Deployment"}
Certificate recorded, valid to 2026-11-29
Authorization not required, issuer https://api.shipstatic.com/auth
First tool surface recorded: 15 tools (server version 1.10.2)
Showing the latest 36 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨25 unchanged words⟩ "},"domain":{"description":"Domain name: a ShipStatic domain (e.g. \"www.example.com\yourname.shipstatic.com\") or a custom domain (e.g. \"blog.example.com\www.example.com\")","type":"string"},"labels" ⟨18 unchanged words⟩
{"destructiveHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Connect CustomSet Domain"}
⟨6 unchanged words⟩ ":"Domain name to check (e.g. \"yourname.shipstatic.com\" or \"www.example.com\"). Call before domains_set to check availability. ⟨6 unchanged words⟩
⟨11 unchanged words⟩ Call after domains_set. Custom domains only: aplatformShipStaticsubdomaindomain has no records to configure.
⟨267 unchanged words⟩ required record. The diagnostic under \"unverified\";platformShipStatic domains are born verified. One of: pending, ⟨78 unchanged words⟩
⟨6 unchanged words⟩ at the domain's DNS provider. Call after domains_set. Custom domains only: a platform subdomain has no records to configure.
⟨9 unchanged words⟩ 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.
⟨9 unchanged words⟩ 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 ⟨24 unchanged words⟩
⟨247 unchanged words⟩ DNS verification has got: \"pending\" isnotherequiredsite'srecordCNAME not pointing here, \"partial\" issomeaofwwwthemdomain's CNAME pointing here without its apex A record (the redirect), \"verified\" isall.every required record. The diagnostic under \"unverified\"; platform domains ⟨90 unchanged words⟩
⟨234 unchanged words⟩ DNS verification has got: \"pending\" isnotherequiredsite'srecordCNAME not pointing here, \"partial\" issomeaofwwwthemdomain's CNAME pointing here without its apex A record (the redirect), \"verified\" isall.every required record. The diagnostic under \"unverified\"; platform domains ⟨84 unchanged words⟩
⟨208 unchanged words⟩ ,"type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as ⟨19 unchanged words⟩ . Null on deployments older than the tag.","type":["string","null"]}},"required":["deployment","url", ⟨12 unchanged words⟩
⟨243 unchanged words⟩ ,"type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as ⟨19 unchanged words⟩ . Null on deployments older than the tag.","type":["string","null"]}},"required":["deployment","url", ⟨12 unchanged words⟩
⟨22 unchanged words⟩ when unidentified.","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Provider name, e.g. \"Cloudflare\"; null if unknown.","type":["string","null"]},"url":{"anyOf":[{"format" ⟨60 unchanged words⟩
⟨20 unchanged words⟩ ,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked.","type":["string","null"]},"domain":{"description":"The domain ⟨284 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page; null on the last page. The whole has-more signal.","type":["string","null"]},"domains":{"description":"The domains ⟨21 unchanged words⟩ ,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked.","type":["string","null"]},"domain":{"description":"The domain ⟨291 unchanged words⟩
⟨20 unchanged words⟩ ,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked.","type":["string","null"]},"domain":{"description":"The domain ⟨303 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether nobody has registered the name ⟨12 unchanged words⟩ domain is a write, not a create."},"normalized":{"anyOftype":[{"typeboolean":,"stringnull"]},{"typenormalized":"null"}],{"description":"The normalized domain name; null when invalid."},"reason":{"anyOf":[{"type":["string"},{"type":"null"}]},"reason":{"description":"Why the name is unusable, for display; null when it is usable.","type":["string","null"]},"valid":{"description":"Whether the ⟨13 unchanged words⟩
⟨12 unchanged words⟩ account is allowed to hold: the samethreekeys as usage, so the pair divides.", ⟨44 unchanged words⟩ 9007199254740991,"minimum":0,"type":"integer"},"seats":{"description":"People with a seat: the owner and every member. Absent on responses that predate seats, which then mean one seat.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["deployments","platformDomains","customDomains ⟨8 unchanged words⟩ ,"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name; null if not set.","type":["string","null"]},"plan":{"description":"The tier ⟨57 unchanged words⟩ the platform's own suffix, e.g. \"my-app.shipstatic.com\".","maximum":9007199254740991,"minimum":0,"type":"integer"},"seats":{"description":"People with a seat: the owner and every member. Absent on responses that predate seats, which then mean one seat.","maximum":9007199254740991,"minimum":0,"type ⟨15 unchanged words⟩
List all domains with their URLs, linked deployment, andverification status.`status`. The response's `cursor` is null on the last ⟨10 unchanged words⟩
⟨141 unchanged words⟩ "minimum":0,"type":"integer"},"paused":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."},"status":{"description":"What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNSverificationrecordsstate;configured; \"success\paused\" means thedomainplanservesnothelongerlinkedhasdeployment.room for it. Read this word rather than recomputing it. One of:pendinglive,partialunlinked,successunverified, paused.","type":"string"},"url ⟨6 unchanged words⟩ "format":"uri","type":"string"},"verification":{"description":"How far DNS verification has got: \"pending\" is no required record pointing here, \"partial\" is some of them, \"verified\" is all. The diagnostic under \"unverified\"; platform domains are born verified. One of: pending, partial, verified.","type":"string"},"verifications":{"description":"How many DNS verification attempts this domain has had.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"When DNS last became verified; null if it never has, and never cleared, so a domain whose records moved away keeps it. Read `verification` for whether DNS is right now."}},"required":["domain","url","status","deployment","statuslinked","labelslinks","createdverification","linkedverified","linksverifications","paused","labels","created"],"type":"object"},"type": ⟨6 unchanged words⟩
⟨126 unchanged words⟩ "minimum":0,"type":"integer"},"paused":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."},"status":{"description":"What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNSverificationrecordsstate;configured; \"success\paused\" means thedomainplanservesnothelongerlinkedhasdeployment.room for it. Read this word rather than recomputing it. One of:pendinglive,partialunlinked,successunverified, paused.","type":"string"},"url ⟨6 unchanged words⟩ "format":"uri","type":"string"},"verification":{"description":"How far DNS verification has got: \"pending\" is no required record pointing here, \"partial\" is some of them, \"verified\" is all. The diagnostic under \"unverified\"; platform domains are born verified. One of: pending, partial, verified.","type":"string"},"verifications":{"description":"How many DNS verification attempts this domain has had.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"When DNS last became verified; null if it never has, and never cleared, so a domain whose records moved away keeps it. Read `verification` for whether DNS is right now."}},"required":["domain","url","status","deployment","statuslinked","labelslinks","createdverification","linkedverified","linksverifications","paused","labels","created","isCreate"],"type":"object"}
⟨13 unchanged words⟩ DNS records from domains_records. Verification is asynchronous — read the domainstatusagainupdateswithoncedomains_getDNStopropagates.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.
⟨14 unchanged words⟩ queued, normalized. The check runs asynchronously; thedomaindomain'sstatus`verification`updatesand `status` update once DNSpropagates.propagates, so read the domain again rather than trusting this acknowledgement for a verdict.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨159 unchanged words⟩ description":"Full URL to the deployment screenshot.CapturedRenderedasynchronouslyonafterthedeploy;first request for it, so the URL is returned immediatelybutand theimagefirstmayrequesttaketakes a fewsecondsseconds;toeverybecomerequestavailable.after that is served immediately.","format":"uri","type":"string ⟨107 unchanged words⟩
⟨126 unchanged words⟩ description":"Full URL to the deployment screenshot.CapturedRenderedasynchronouslyonafterthedeploy;first request for it, so the URL is returned immediatelybutand theimagefirstmayrequesttaketakes a fewsecondsseconds;toeverybecomerequestavailable.after that is served immediately.","format":"uri","type":"string ⟨100 unchanged words⟩
⟨161 unchanged words⟩ description":"Full URL to the deployment screenshot.CapturedRenderedasynchronouslyonafterthedeploy;first request for it, so the URL is returned immediatelybutand theimagefirstmayrequesttaketakes a fewsecondsseconds;toeverybecomerequestavailable.after that is served immediately.","format":"uri","type":"string ⟨100 unchanged words⟩
⟨10 unchanged words⟩ type":"null"}],"description":"Whetherthenobodydomainhasisregisteredavailable;the name yet; null when invalid. Creating it would be new; re-pointing your own domain is a write, not a create."},"normalized":{"anyOf":[{"type ⟨20 unchanged words⟩ name is unusable, for display; null whenvalid.it is usable."},"valid":{"description":"Whether thedomaindomain'snameshape isvalid.usable.","type":"boolean"}},"required": ⟨6 unchanged words⟩
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page; null on the last page. The whole has-more signal."},"deployments":{"description":"The deployments on this page.","items":{"additionalProperties":false,"properties":{"config":{"description":"True if the deployment includes a ship.json routing config.","type":"boolean"},"created":{"description":"Unix timestamp (seconds) when the deployment was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"description":"Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".","type":"string"},"expires":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."},"files":{"description":"Number of files in the deployment.","maximum":9007199254740991,"minimum":0,"type":"integer"},"labels":{"description":"Labels attached to the deployment; empty when none.","items":{"type":"string"},"type":"array"},"password":{"description":"True if the deployment is password-protected.","type":"boolean"},"screenshot":{"description":"Full URL to the deployment screenshot. Captured asynchronously after deploy; the URL is returned immediately but the image may take a few seconds to become available.","format":"uri","type":"string"},"size":{"description":"Total deployment size in bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.","type":"string"},"url":{"description":"Full URL to the live deployment.","format":"uri","type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag."}},"required":["deployment","url","files","size","status","config","password","labels","via","created","expires","screenshot"],"type":"object"},"type":"array"}},"required":["cursor","deployments"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"config":{"description":"True if the deployment includes a ship.json routing config.","type":"boolean"},"created":{"description":"Unix timestamp (seconds) when the deployment was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"description":"Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".","type":"string"},"expires":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."},"files":{"description":"Number of files in the deployment.","maximum":9007199254740991,"minimum":0,"type":"integer"},"labels":{"description":"Labels attached to the deployment; empty when none.","items":{"type":"string"},"type":"array"},"password":{"description":"True if the deployment is password-protected.","type":"boolean"},"screenshot":{"description":"Full URL to the deployment screenshot. Captured asynchronously after deploy; the URL is returned immediately but the image may take a few seconds to become available.","format":"uri","type":"string"},"size":{"description":"Total deployment size in bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.","type":"string"},"url":{"description":"Full URL to the live deployment.","format":"uri","type":"string"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag."}},"required":["deployment","url","files","size","status","config","password","labels","via","created","expires","screenshot"],"type":"object"}⟨19 unchanged words⟩ , making it permanent. Only present on anonymousdeploys —deploys; absent when the deploy was made with a ⟨7 unchanged words⟩ description":"True if the deployment includes a`ship.json`ship.json routing config.","type":"boolean"}," ⟨40 unchanged words⟩ when the deployment expires; null when permanent. Anonymousdeploys through the hosted MCPdeployments expire 3 days after creation unless claimed; an authenticateddeploydeployment carries one only when it requested a ttl. ⟨15 unchanged words⟩ ":{"description":"Labels attached to thedeployment.deployment; empty when none.","items":{"type":"string"}, ⟨57 unchanged words⟩ },"status":{"description":"Deployment lifecyclestate.state;`success`\"success\" means the site is live.","enum"One of:["pending","success","failed","deletingdeleting."],"type":"string"},"url":{" ⟨20 unchanged words⟩ deployment was created, as shown in deploymenthistory.history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag."} ⟨15 unchanged words⟩
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"domain":{"description":"The domain name that was removed, normalized.","type":"string"}},"required":["domain"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"dns":{"anyOf":[{"additionalProperties":false,"properties":{"provider":{"additionalProperties":false,"description":"The provider serving this domain's DNS; absent when unidentified.","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Provider name, e.g. \"Cloudflare\"; null if unknown."},"url":{"anyOf":[{"format":"uri","type":"string"},{"type":"null"}],"description":"The provider's DNS dashboard, where the records get added; null or absent when unknown."}},"required":["name"],"type":"object"}},"type":"object"},{"type":"null"}],"description":"What the platform recorded about the domain's DNS provider when the domain was created; null if nothing was recorded."},"domain":{"description":"The domain name.","type":"string"}},"required":["domain","dns"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"created":{"description":"Unix timestamp (seconds) when the domain was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked."},"domain":{"description":"The domain name, e.g. \"www.example.com\".","type":"string"},"labels":{"description":"Labels attached to the domain; empty when none.","items":{"type":"string"},"type":"array"},"linked":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when a deployment was last linked; null if never linked."},"links":{"description":"How many times a deployment has been linked to this domain.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"DNS verification state; \"success\" means the domain serves the linked deployment. One of: pending, partial, success, paused.","type":"string"},"url":{"description":"Full URL to the domain.","format":"uri","type":"string"}},"required":["domain","url","deployment","status","labels","created","linked","links"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor for the next page; null on the last page. The whole has-more signal."},"domains":{"description":"The domains on this page.","items":{"additionalProperties":false,"properties":{"created":{"description":"Unix timestamp (seconds) when the domain was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked."},"domain":{"description":"The domain name, e.g. \"www.example.com\".","type":"string"},"labels":{"description":"Labels attached to the domain; empty when none.","items":{"type":"string"},"type":"array"},"linked":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when a deployment was last linked; null if never linked."},"links":{"description":"How many times a deployment has been linked to this domain.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"DNS verification state; \"success\" means the domain serves the linked deployment. One of: pending, partial, success, paused.","type":"string"},"url":{"description":"Full URL to the domain.","format":"uri","type":"string"}},"required":["domain","url","deployment","status","labels","created","linked","links"],"type":"object"},"type":"array"}},"required":["cursor","domains"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"apex":{"description":"The apex (registered) domain where DNS records are managed.","type":"string"},"domain":{"description":"The domain the records are for.","type":"string"},"records":{"description":"The records to configure at the DNS provider, in the order to add them.","items":{"additionalProperties":false,"properties":{"name":{"description":"The DNS name to configure.","type":"string"},"type":{"description":"Record type: A for the apex redirect, CNAME for the hosted subdomain.","enum":["A","CNAME"],"type":"string"},"value":{"description":"The value to set: an IP for A, a hostname for CNAME.","type":"string"}},"required":["type","name","value"],"type":"object"},"type":"array"}},"required":["domain","apex","records"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"created":{"description":"Unix timestamp (seconds) when the domain was created.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The deployment hostname this domain points to; null when reserved but not yet linked."},"domain":{"description":"The domain name, e.g. \"www.example.com\".","type":"string"},"isCreate":{"description":"True when this call created the domain; false when it updated an existing one.","type":"boolean"},"labels":{"description":"Labels attached to the domain; empty when none.","items":{"type":"string"},"type":"array"},"linked":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds) when a deployment was last linked; null if never linked."},"links":{"description":"How many times a deployment has been linked to this domain.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"DNS verification state; \"success\" means the domain serves the linked deployment. One of: pending, partial, success, paused.","type":"string"},"url":{"description":"Full URL to the domain.","format":"uri","type":"string"}},"required":["domain","url","deployment","status","labels","created","linked","links","isCreate"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"domain":{"description":"The domain the setup link is for.","type":"string"},"url":{"description":"The shareable DNS setup URL; whoever opens it sees the records to configure, with no API key.","format":"uri","type":"string"}},"required":["domain","url"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether the domain is available; null when invalid."},"normalized":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The normalized domain name; null when invalid."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why the name is unusable, for display; null when valid."},"valid":{"description":"Whether the domain name is valid.","type":"boolean"}},"required":["valid","normalized","available","reason"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"domain":{"description":"The domain whose DNS verification was queued, normalized. The check runs asynchronously; the domain status updates once DNS propagates.","type":"string"}},"required":["domain"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"caps":{"additionalProperties":false,"description":"What the account is allowed to hold: the same three keys as usage, so the pair divides.","properties":{"customDomains":{"description":"Hostnames the customer owns, paused ones included.","maximum":9007199254740991,"minimum":0,"type":"integer"},"deployments":{"description":"Deployments, every row whatever its status.","maximum":9007199254740991,"minimum":0,"type":"integer"},"platformDomains":{"description":"Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\".","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["deployments","platformDomains","customDomains"],"type":"object"},"email":{"description":"The account email address.","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name; null if not set."},"plan":{"description":"The tier the account stands at. One of: free, pro, team, scale, sponsored.","type":"string"},"usage":{"additionalProperties":false,"description":"What the account currently holds.","properties":{"customDomains":{"description":"Hostnames the customer owns, paused ones included.","maximum":9007199254740991,"minimum":0,"type":"integer"},"deployments":{"description":"Deployments, every row whatever its status.","maximum":9007199254740991,"minimum":0,"type":"integer"},"platformDomains":{"description":"Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\".","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["deployments","platformDomains","customDomains"],"type":"object"}},"required":["email","name","plan","usage","caps"],"type":"object"}{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"List Deployments"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false,"title":"Update Deployment Labels"}
Deploy a static site to a live URL—: free, no account or API key required. ⟨40 unchanged words⟩ connected account, the response also includes a one-time claim URL,(and the site expires in 3 days unlessclaimed) — alwaysclaimed.showPassboth`password` tothe user. Tomake the siteprivate, pass `password`; always show the password to the user if you set one.private.
⟨241 unchanged words⟩ {"type":"null"}],"description":"Origin tagHowfortheanalyticsdeployment(e.g.was\"gpt\"created,\"mcp\",as\"cli\",shown\"web\").in deployment history. Null onlegacydeploymentsuploadedolderbeforethantaggingtheexisted.tag."}},"required":["deployment","url" ⟨12 unchanged words⟩
Permanentlydeletedeletes a domain.You MUST confirm with the user before calling this tool, referencing the domain name.
Look UpGet DNS Provider
Look upReturns the DNS provider recorded forathe domain, if known (e.g. Cloudflare, Namecheap). Helps the user know: wheretoitsconfigureDNStheirrecordsDNSarerecords.configured.
⟨4 unchanged words⟩ :{"domain":{"description":"Domain nameto look up DNS provider for(e.g. \"www.example.com\"). Must be a domain previously created with domains_set.","type":"string"}},"required": ⟨3 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Look UpGet DNS Provider"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Get Domain"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"List Domains"}
GetReturns the DNS recordsthe user needsto configure attheirthe domain's DNS provider. Call after domains_set.You MUST show the returned records to the user.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Get DNS Records"}
⟨15 unchanged words⟩ a deployment, switch deployments, or update labels.After creating, calldomains_recordsandthenshowreturns the DNS records tothe user.configure.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title ⟨3 unchanged words⟩
GetReturns a shareable DNS setuplink for a domain. Share the linkURLwiththattheneedsusernosoAPItheykey,orfor whoever managestheir DNS, can viewtherequired records without needing an APIdomain'skey.DNS.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Share DNS Setup"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Check Domain Availability"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Verify Domain DNS"}
Show authenticated accountReturnsdetailstheincludingaccount's email, name, plan, current usage andusage.plan caps.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true,"title":"Show Account"}