Skip to content

ship.page

by ship.page · remote · no sign-in to list tools · v1.0.0 · published by page.ship

Deploy HTML from any agent: POST markup, get a live URL. Static hosting API with MCP tools.

Deletes · 8Changes · 3

11 tools: 8 can delete or cancel things and 3 change things.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http ship-page https://ship.page/mcp

Findings

Matches of fixed checks, with the text they matched.

4 warn
  • The server marks "list_drops" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "list_drops" says "list": a word for reading.

    What this check looks for
  • The server marks "restore_drop" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "restore_drop" says "drop": a word for removing or ending something.

    What this check looks for
  • The server marks "get_limits" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_limits" says "get": a word for reading.

    What this check looks for
  • The server marks "get_account" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_account" says "get": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

11 tools

Deletes or cancels 8Claude Code: deny
  • append_filesAdd files to a drop owned by the authenticated account (requires an sp_ API key and an active subscription): up to 10,000 files per drop in total, and existing paths are overwritte…No findings

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Add files to a drop owned by the authenticated account (requires an sp_ API key and an active subscription): up to 10,000 files per drop in total, and existing paths are overwritten. The drop keeps its current expiry and password protection.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • claim_dropAttach an anonymously deployed drop to the authenticated account using its one-time claim token (spc_..., returned once by deploy_html/deploy_files).No findings

    Why it is in this group

    • The name "claim_drop" says "drop": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • delete_dropPermanently delete a drop owned by the authenticated account (requires an sp_ API key).No findings

    Why it is in this group

    • The name "delete_drop" says "delete": a word for removing or ending something.
    • The description says "Permanently delete".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Permanently delete a drop owned by the authenticated account (requires an sp_ API key). The URL stops serving immediately and cannot be recovered.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • deploy_filesDeploy a map of path -> content as a multi-file site (must include index.html to serve at the root).No findings

    Why it is in this group

    • The name "deploy_files" says "deploy": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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 10,000 files, custom or no TTL, named drops.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • deploy_htmlDeploy one HTML document and get back a live, unguessable https://<slug>.ship.place/ URL.No findings

    Why it is in this group

    • The name "deploy_html" says "deploy": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Deploy one HTML document and get back a live, unguessable https://<slug>.ship.place/ URL. Anonymous: 10 deploys/min per IP, 10MB body cap, 30-day expiry. Pro ($4/mo): custom or no TTL, named drops.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • remove_drop_passwordRemove password protection from a drop you own, making it readable by anyone with its URL.No findings

    Why it is in this group

    • The name "remove_drop_password" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
  • restore_dropBring back an expired drop owned by the authenticated account while its files are still retained (requires an sp_ API key), up to 90 days past expiry.1 finding

    Why it is in this group

    • The name "restore_drop" says "drop": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "restore_drop" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "restore_drop" says "drop": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Bring back an expired drop owned by the authenticated account while its files are still retained (requires an sp_ API key), up to 90 days past expiry. Free accounts get the drop back at the 90-day lifetime; on a paid plan the restored drop never expires again.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
    • idempotentHint: false
  • set_drop_passwordSet or rotate the shared password on a drop you own.No findings

    Why it is in this group

    • The name "set_drop_password" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: true
    • idempotentHint: false
Changes things 3Claude Code: ask
  • get_accountShow the authenticated account's plan, subscription status and usage (requires an sp_ API key).1 finding

    Why it is in this group

    • The name "get_account" says "get": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "get_account" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_account" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: false
  • get_limitsShow 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.1 finding

    Why it is in this group

    • The name "get_limits" says "get": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "get_limits" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_limits" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: false
  • list_dropsList drops owned by the authenticated account (requires an sp_ API key; anonymous drops are not listable).1 finding

    Why it is in this group

    • The name "list_drops" says "list": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "list_drops" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "list_drops" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http ship-page https://ship.page/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [],
    "ask": [
      "mcp__ship-page__list_drops",
      "mcp__ship-page__get_limits",
      "mcp__ship-page__get_account"
    ],
    "deny": [
      "mcp__ship-page__deploy_html",
      "mcp__ship-page__deploy_files",
      "mcp__ship-page__append_files",
      "mcp__ship-page__claim_drop",
      "mcp__ship-page__restore_drop",
      "mcp__ship-page__delete_drop",
      "mcp__ship-page__set_drop_password",
      "mcp__ship-page__remove_drop_password"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as ship-page. Review it before you use it.