{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "infrastructure",
    "endpoint": "https://mcp.shipstatic.com",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/shipstatic-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/shipstatic-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/shipstatic-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 9607,
        "counts": {
          "error": 0,
          "note": 0,
          "warn": 0
        },
        "findings": []
      },
      "checkedAt": "2026-10-04T22:23:49Z",
      "count": 15,
      "schemaTokens": 9607,
      "status": "ok",
      "tools": [
        {
          "name": "deployments_upload",
          "title": "Deploy Static Site",
          "description": "Deploy a static site to a live URL: free, no account or API key required.\n\n**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.\n\nReturns 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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "files": {
                "description": "Files that make up the site. The site root is implied by these paths.",
                "items": {
                  "properties": {
                    "content": {
                      "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.",
                      "type": "string"
                    },
                    "encoding": {
                      "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.",
                      "enum": [
                        "utf-8",
                        "base64"
                      ],
                      "type": "string"
                    },
                    "path": {
                      "description": "Relative path within the site (e.g. \"index.html\", \"assets/app.css\"). No leading slash; no parent-folder wrapping.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "path",
                    "content"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "idempotencyKey": {
                "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 the original deployment is replayed instead (within 24 hours). 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": {
                "description": "Labels for organizing deployments (e.g. [\"production\", \"v1.2\"]). Lowercase, 3-25 chars, allows . _ - separators. Up to 10.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "password": {
                "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.",
                "type": "string"
              },
              "ttl": {
                "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 a custom domain: deploy without one if the site needs a domain.",
                "type": "number"
              }
            },
            "required": [
              "files"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "claim": {
                "description": "One-time URL that claims this anonymous deployment to a free account, making it permanent. Only present on anonymous deploys; absent when the deploy was made with a connected account.",
                "format": "uri",
                "type": "string"
              },
              "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. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
                "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": {
                "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.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "deployment",
              "url",
              "files",
              "size",
              "status",
              "config",
              "password",
              "labels",
              "via",
              "created",
              "expires",
              "screenshot"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Deploy Static Site"
          }
        },
        {
          "name": "deployments_list",
          "title": "List Deployments",
          "description": "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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "cursor": {
                "description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
                "type": "string"
              },
              "limit": {
                "description": "Maximum number of items to return in one page. Omit for the server default.",
                "maximum": 9007199254740991,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "cursor": {
                "description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "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. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
                      "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": {
                      "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.",
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "deployment",
                    "url",
                    "files",
                    "size",
                    "status",
                    "config",
                    "password",
                    "labels",
                    "via",
                    "created",
                    "expires",
                    "screenshot"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "cursor",
              "deployments"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List Deployments"
          }
        },
        {
          "name": "deployments_get",
          "title": "Get Deployment",
          "description": "Get deployment details including URL, status, file count, size, labels, and password protection state.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "deployment": {
                "description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Returned by deployments_upload or deployments_list.",
                "type": "string"
              }
            },
            "required": [
              "deployment"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
                "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": {
                "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.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "deployment",
              "url",
              "files",
              "size",
              "status",
              "config",
              "password",
              "labels",
              "via",
              "created",
              "expires",
              "screenshot"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get Deployment"
          }
        },
        {
          "name": "deployments_set",
          "title": "Update Deployment Labels",
          "description": "Update deployment labels. Replaces all existing labels.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "deployment": {
                "description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Use deployments_list to find deployments.",
                "type": "string"
              },
              "labels": {
                "description": "Labels to set. Replaces all existing labels. Pass empty array to clear.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "deployment",
              "labels"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
                "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": {
                "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.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "deployment",
              "url",
              "files",
              "size",
              "status",
              "config",
              "password",
              "labels",
              "via",
              "created",
              "expires",
              "screenshot"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "openWorldHint": false,
            "readOnlyHint": false,
            "title": "Update Deployment Labels"
          }
        },
        {
          "name": "deployments_delete",
          "title": "Delete Deployment",
          "description": "Permanently deletes a deployment and its files.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "deployment": {
                "description": "Deployment hostname to delete (e.g. \"happy-cat-abc1234.shipstatic.com\")",
                "type": "string"
              }
            },
            "required": [
              "deployment"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Delete Deployment"
          }
        },
        {
          "name": "domains_set",
          "title": "Connect Custom Domain",
          "description": "Create or update a custom domain. Can reserve a name (omit deployment), link it to a deployment, switch deployments, or update labels. domains_records then returns the DNS records to configure.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "deployment": {
                "description": "Deployment to serve on this domain (e.g. \"happy-cat-abc1234.shipstatic.com\"). Omit to reserve the domain without linking.",
                "type": "string"
              },
              "domain": {
                "description": "Domain name (e.g. \"www.example.com\" or \"blog.example.com\")",
                "type": "string"
              },
              "labels": {
                "description": "Labels for organizing domains (e.g. [\"production\"]).",
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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": {
                "description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "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"
              },
              "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 DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
                "type": "string"
              },
              "url": {
                "description": "Full URL to the domain.",
                "format": "uri",
                "type": "string"
              },
              "verification": {
                "description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. 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",
              "linked",
              "links",
              "verification",
              "verified",
              "verifications",
              "paused",
              "labels",
              "created",
              "isCreate"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Connect Custom Domain"
          }
        },
        {
          "name": "domains_list",
          "title": "List Domains",
          "description": "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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "cursor": {
                "description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
                "type": "string"
              },
              "limit": {
                "description": "Maximum number of items to return in one page. Omit for the server default.",
                "maximum": 9007199254740991,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "cursor": {
                "description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "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": {
                      "description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "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"
                    },
                    "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 DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
                      "type": "string"
                    },
                    "url": {
                      "description": "Full URL to the domain.",
                      "format": "uri",
                      "type": "string"
                    },
                    "verification": {
                      "description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. 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",
                    "linked",
                    "links",
                    "verification",
                    "verified",
                    "verifications",
                    "paused",
                    "labels",
                    "created"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "cursor",
              "domains"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "List Domains"
          }
        },
        {
          "name": "domains_get",
          "title": "Get Domain",
          "description": "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`).",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name (e.g. \"www.example.com\"). Use domains_list to find names.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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": {
                "description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "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"
              },
              "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 DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
                "type": "string"
              },
              "url": {
                "description": "Full URL to the domain.",
                "format": "uri",
                "type": "string"
              },
              "verification": {
                "description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. 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",
              "linked",
              "links",
              "verification",
              "verified",
              "verifications",
              "paused",
              "labels",
              "created"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get Domain"
          }
        },
        {
          "name": "domains_records",
          "title": "Get DNS Records",
          "description": "Returns the DNS records to configure at the domain's DNS provider. Call after domains_set. Custom domains only: a platform subdomain has no records to configure.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name. Must be a domain previously created with domains_set.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get DNS Records"
          }
        },
        {
          "name": "domains_dns",
          "title": "Get DNS Provider",
          "description": "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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name (e.g. \"www.example.com\"). Must be a domain previously created with domains_set.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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": {
                            "description": "Provider name, e.g. \"Cloudflare\"; null if unknown.",
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "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"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Get DNS Provider"
          }
        },
        {
          "name": "domains_share",
          "title": "Share DNS Setup",
          "description": "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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name to generate a share link for. Must be a domain previously created with domains_set.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Share DNS Setup"
          }
        },
        {
          "name": "domains_validate",
          "title": "Check Domain Availability",
          "description": "Check if a domain name is valid and available before creating it. Returns the normalized form and availability.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name to check (e.g. \"www.example.com\"). Call before domains_set to check availability.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "available": {
                "description": "Whether nobody has registered the name yet; null when invalid. Creating it would be new; re-pointing your own domain is a write, not a create.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "normalized": {
                "description": "The normalized domain name; null when invalid.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "reason": {
                "description": "Why the name is unusable, for display; null when it is usable.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "valid": {
                "description": "Whether the domain's shape is usable.",
                "type": "boolean"
              }
            },
            "required": [
              "valid",
              "normalized",
              "available",
              "reason"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Check Domain Availability"
          }
        },
        {
          "name": "domains_verify",
          "title": "Verify Domain DNS",
          "description": "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.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name to verify DNS for. Must be a domain previously created with domains_set.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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's `verification` and `status` update once DNS propagates, so read the domain again rather than trusting this acknowledgement for a verdict.",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Verify Domain DNS"
          }
        },
        {
          "name": "domains_delete",
          "title": "Delete Domain",
          "description": "Permanently deletes a domain.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "properties": {
              "domain": {
                "description": "Domain name to delete (e.g. \"www.example.com\")",
                "type": "string"
              }
            },
            "required": [
              "domain"
            ],
            "type": "object"
          },
          "outputSchema": {
            "$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"
          },
          "annotations": {
            "destructiveHint": true,
            "idempotentHint": true,
            "openWorldHint": true,
            "readOnlyHint": false,
            "title": "Delete Domain"
          }
        },
        {
          "name": "whoami",
          "title": "Show Account",
          "description": "Returns your email and name, and the account's plan, usage and caps.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          },
          "outputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "caps": {
                "additionalProperties": false,
                "description": "What the account is allowed to hold: the same 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"
                  },
                  "members": {
                    "description": "Members of the account, the owner included; a pending invitation is not one.",
                    "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",
                  "members"
                ],
                "type": "object"
              },
              "email": {
                "description": "The account email address.",
                "type": "string"
              },
              "name": {
                "description": "Display name; null if not set.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "plan": {
                "description": "The plan the account is on. 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"
                  },
                  "members": {
                    "description": "Members of the account, the owner included; a pending invitation is not one.",
                    "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",
                  "members"
                ],
                "type": "object"
              }
            },
            "required": [
              "email",
              "name",
              "plan",
              "usage",
              "caps"
            ],
            "type": "object"
          },
          "annotations": {
            "destructiveHint": false,
            "openWorldHint": false,
            "readOnlyHint": true,
            "title": "Show Account"
          }
        }
      ]
    },
    "name": "ShipStatic",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": [
      {
        "registryType": "npm",
        "identifier": "@shipstatic/mcp",
        "version": "2.3.3",
        "transport": "stdio"
      }
    ],
    "pageJsonUrl": "https://www.anchorterminal.com/tools/shipstatic-mcp.json",
    "popularity": {
      "githubStars": 6,
      "npmWeekly": 2242
    },
    "registryName": "com.shipstatic/mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.shipstatic.com"
      }
    ],
    "repository": "https://github.com/shipstatic/mcp",
    "reviewed": false,
    "slug": "shipstatic-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.shipstatic/mcp",
    "summary": "Deploy static websites from AI agents. Free at mcp.shipstatic.com — no install, no signup.",
    "updatedAt": "2026-09-29T23:28:55Z",
    "url": "https://www.anchorterminal.com/tools/shipstatic-mcp",
    "vendor": "shipstatic.com",
    "vendorUrl": "https://shipstatic.com",
    "version": "2.3.3",
    "websiteUrl": "https://shipstatic.com",
    "where": "both",
    "why": [
      "vendor",
      "popular"
    ]
  }
}
