ship.page MCP server
Throw HTML at an API, get back a live URL. ship.page is a remote MCP server + plain REST API that lets an AI agent put content on the public internet — no account, no API key, no OAuth dance. One POST, one live *.shipped.page URL.
Endpoint
https://ship.page/mcp
Client config:
{
"mcpServers": {
"ship.page": { "url": "https://ship.page/mcp" }
}
}
Transport: Streamable HTTP. No auth required for anonymous deploys (7-day retention). Pass Authorization: Bearer sp_… (free key from the dashboard) for 30-day drops and higher limits; Pro drops never expire.
Tools
| Tool | What it does |
|---|---|
deploy_html |
Deploy a single HTML page, returns a live URL |
deploy_files |
Deploy a multi-file site from a path → content map (base64 for binaries) |
append_files |
Add files to an existing owned drop |
list_drops |
List the authenticated account's drops |
claim_drop |
Claim an anonymous drop into an account (slug + claim token) |
restore_drop |
Restore an expired drop (free ≤30d past expiry, paid ≤90d) |
delete_drop |
Delete an owned drop |
get_limits |
Plan matrix, quotas, and current usage |
get_account |
Account + plan status for the current key |
Errors come back as structured JSON with a human-readable hint agents can relay verbatim when something is plan-gated.
Local / stdio clients
For clients that only speak stdio, bridge via mcp-remote:
{
"mcpServers": {
"ship.page": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://ship.page/mcp"]
}
}
}
The included Dockerfile packages exactly this bridge, so the server can be built and introspected as a standard container (e.g. by directory scanners).
REST API
Everything the MCP tools do is also plain HTTP. Full OpenAPI 3.1 spec: ship.page/openapi.json
curl -X POST https://ship.page/deploy \
-H "Content-Type: text/html" \
--data-binary @report.html
Links
- Docs: ship.page/docs/agents
- GitHub Action: bitgate/ship-page-action
- Glama connector:
- Official MCP registry:
page.ship/ship-page