{"name":"page.ship/ship-page","slug":"ship-page","title":"ship.page","description":"Deploy HTML from any agent: POST markup, get a live URL. Static hosting API with MCP tools.","url":"https://mcp.market/server/ship-page","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"devtools","tags":["devtools","ai"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":19,"ok":19,"last_checked_at":"2026-09-24T04:45:57.666Z","last_ok_at":"2026-09-24T04:45:57.666Z","latency_ms":211},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/bitgate/ship.page","website":"https://ship.page","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://ship.page/mcp"}],"packages":[],"tools":[{"name":"append_files","description":"Add files to a drop owned by the authenticated account (requires an sp_ API key and an active subscription): up to 900 files per call, 10,000 per drop total, and existing paths are overwritten. The drop keeps its current expiry and password protection.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its ${domain} URL)."},"files":{"type":"object","description":"Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files.","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"encoding":{"type":"string","const":"base64"},"content":{"type":"string"}},"required":["encoding","content"]},{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]}]}}},"required":["slug","files"]}},{"name":"claim_drop","description":"Attach an anonymously deployed drop to the authenticated account using its one-time claim token (spc_..., returned once by deploy_html/deploy_files). Claiming extends the drop to the free-account lifetime (90 days) and can revive an offline drop during its 30-day private recovery window. Claimed drops become listable, deletable, and — on paid plans — redeployable via named drops. Requires an sp_ API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its ${domain} URL)."},"claim_token":{"type":"string","description":"The one-time spc_... token returned at deploy time."}},"required":["slug","claim_token"]}},{"name":"delete_drop","description":"Permanently delete a drop owned by the authenticated account (requires an sp_ API key). The URL stops serving immediately and cannot be recovered.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its ${domain} URL)."}},"required":["slug"]}},{"name":"deploy_files","description":"Deploy a map of path -> content as a multi-file site (must include index.html to serve at the root). Anonymous: up to 100 files per request, 30-day expiry (90 days once signed in). Pro ($4/mo): up to 900 files, custom or no TTL, named drops.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"files":{"type":"object","description":"Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files.","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"encoding":{"type":"string","const":"base64"},"content":{"type":"string"}},"required":["encoding","content"]},{"type":"object","properties":{"content":{"type":"string"}},"required":["content"]}]}},"ttl":{"type":"integer","description":"Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry."},"name":{"type":"string","description":"Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain."},"email":{"type":"string","description":"Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already)."},"password":{"type":"string","minLength":8,"maxLength":128,"writeOnly":true,"description":"Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again."}},"required":["files"]}},{"name":"deploy_html","description":"Deploy one HTML document and get back a live, unguessable https://<slug>.shipped.run/ URL. Anonymous: 10 deploys/min per IP, 10MB body cap, 30-day expiry. Pro ($4/mo): custom or no TTL, named drops.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The full HTML document to publish."},"ttl":{"type":"integer","description":"Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry."},"name":{"type":"string","description":"Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain."},"email":{"type":"string","description":"Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already)."},"password":{"type":"string","minLength":8,"maxLength":128,"writeOnly":true,"description":"Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again."}},"required":["html"]}},{"name":"get_account","description":"Show the authenticated account's plan, subscription status and usage (requires an sp_ API key). Anonymous callers should use get_limits for the static free-tier limits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","additionalProperties":false}},{"name":"get_limits","description":"Show the ship.page plan matrix (anonymous free tier vs Pro $4/mo vs Team $19/mo) and, when an sp_ API key is present, the caller's current account/plan status.","write_action":false,"price_micros":0,"input_schema":{"type":"object","additionalProperties":false}},{"name":"list_drops","description":"List drops owned by the authenticated account (requires an sp_ API key; anonymous drops are not listable). Returns slug, url, name, file counts, expiry and password_protected, newest first.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Max drops to return (1-500, default 100)."},"offset":{"type":"integer","description":"Number of drops to skip (default 0)."}}}},{"name":"remove_drop_password","description":"Remove password protection from a drop you own, making it readable by anyone with its URL. Requires an sp_ API key; works even after your paid subscription lapses.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its URL)."}},"required":["slug"]}},{"name":"restore_drop","description":"Bring back an expired drop owned by the authenticated account while its files are still retained (requires an sp_ API key). Free accounts restore up to 30 days past expiry and the drop comes back at the 90-day lifetime; paid plans restore up to 90 days past expiry and the drop never expires again.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its ${domain} URL)."}},"required":["slug"]}},{"name":"set_drop_password","description":"Set or rotate the shared password on a drop you own. Requires an sp_ API key and active paid Pro/Team; unavailable billing returns an error, not a public drop. Visitors unlock in their browser. Never put the password in a URL.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"The drop slug (the subdomain part of its URL)."},"password":{"type":"string","minLength":8,"maxLength":128,"writeOnly":true,"description":"Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again."}},"required":["slug","password"]}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-23T04:54:56.946Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T04:54:56.864Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 693ms"]},"poisoning":{"score":15,"max":15,"notes":["11 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 7 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://ship.page/mcp","reachable":true,"authRequired":false,"latencyMs":693,"serverInfo":{"name":"ship.page","version":"1.0.0"}}],"packages":[],"repo":{"found":false,"owner":"bitgate","repo":"ship.page","error":"repo not found"},"icon":{"url":"https://ship.page/favicon.png","source":"registry","width":192,"height":192},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}