Deploy static websites, landing pages, and prototypes instantly from AI agents. Start with the hosted endpoint at mcp.shipstatic.com (no install, no signup, no API key), or install this package to deploy folders from your own machine. The same fifteen tools either way.
ShipStatic MCP demonstrates strong definition quality with well-structured tool naming (verb_resource pattern), comprehensive parameter schemas with types and descriptions, and documented output schemas via external type imports. All 15 tools have clear descriptions in the 100-300 character range, exceeding the rubric baseline. Tool names follow verb_noun convention (deployments_upload, domains_list, etc.). Parameters include proper type declarations and descriptive text. However, there are minor gaps: (1) error handling guidance is not visible in descriptions, LLMs cannot tell which operations are retryable vs fatal; (2) some parameter constraints (e.g., ttl range, limit bounds) lack explicit documentation; (3) the split between STDIO upload and account-tied tools reduces schema visibility for the upload tool in this codebase. The architecture (importing schemas from @shipstatic/types/schemas) is excellent practice, it ensures output schemas are validated and not duplicated, but it means schema details are not visible in this source file, limiting auditability here. Per-tool analysis shows consistently strong naming and description quality, with 14 of 15 tools scoring 70+ overall.
Delete a deployment and take it offline.
Get deployment details including URL, status, file count, size, labels, and password protection state.
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.
Update a deployment's labels and password protection.
Deploy a static site instantly: upload a directory and get a live URL. Returns the live URL, file count, and size. Without SHIP_TOKEN, the response also includes a one-time claim URL, and the site expires in 3 days unless claimed.
Disconnect a custom domain.
Error handling guidance absent from tool descriptions. LLMs cannot determine which operations are retryable (e.g., network failures on deployments_upload) vs fatal (e.g., invalid domain on domains_verify). Descriptions do not explain error conditions or recovery paths.
Parameter constraints underdocumented. 'limit' parameters lack explicit bounds (e.g., 1 - 100, defaults to 20). 'ttl' in deployments_upload lacks range guidance (seconds, max value?). Without explicit constraints, LLMs may pass invalid values (negative ttl, limit=10000) that fail at runtime.
deployments_upload schema not visible in source. Tool definition is authored per-transport (noted in src/tools.ts comments), split between server.ts files. This codebase shows 14/15 tools with full schemas visible, but upload input schema depends on transport context (filesystem path for STDIO, bytes for HTTP). Schema auditability is compromised.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | 2025-06-18+ | v2 |
Get the DNS provider recorded when this domain was created.
Get a custom domain's current status and verification state.
List all connected custom domains. The response's `cursor` is null on the last page; pass it back as `cursor` to fetch the next.
Get the DNS records required to complete domain verification.
Connect a custom domain to a deployment or update its connection.
Generate a shareable link to invite someone to manage a domain.
Validate a custom domain before connecting it.
Complete domain verification by checking the DNS records.
Get account details including email, name, plan, usage, and capabilities.
Idempotency not explicitly surfaced in descriptions. deployments_upload accepts 'idempotencyKey' parameter, but the description does not state 'Calling with the same idempotencyKey is safe and returns the same deployment.' LLMs cannot infer retry safety from the parameter name alone.
Pagination cursor semantics not fully explicit. domains_list and deployments_list state 'pass it back as `cursor` to fetch the next' but do not clarify: is cursor opaque? Can it be stored and reused later? Does it expire? Incomplete pagination docs lead to misuse.