page.deed/deed-page · v1.9.0 · cloud-and-infra
deed.page is healthy: it completed an MCP handshake in 2001 ms and exposes 23 tools.
Publish permanent static sites via MCP/REST. 23 tools. No account or claim link.
Endpoint: https://deed.page/mcp (streamable-http)
No repository listed · Website · JSON · Add to my inventory
| Users (last 30 days) | 0 |
| Handshake | Healthy |
| Auth needed | None |
| Tool count | 23 |
| Latency | 2001 ms |
| Last checked (UTC) | 2026-10-15T13:10:18.008Z |
| Checked (UTC) | Status | Latency | Error |
|---|---|---|---|
| 2026-10-15T13:10:18.008Z | Healthy | 2001 |
publish_site | Use this when the user wants something put online, shared as a link, or hosted. Publishes files to a live permanent URL at the chosen slug. Paths are stored exactly. Returns {url, path_url, slug, version, token?}. On deed.page, url and path_url are both https://{slug}.deed.page/. The token appears o |
update_site | Use this to replace (or with merge=true, add to) the files of a slug you already own. Requires the token from the first publish. To undo, call restore_version. Returns the same shape as publish_site with a bumped version. Pass expected_version (the live vN) so a stale write returns version_conflict |
get_site | Use this to check whether a slug is live and read its URL, version, size, and timestamps. Public; no token needed. |
list_sites | Use this to list every live site owned by your token, with URLs and versions. |
delete_site | Use this only when the user explicitly asks to take a site down. Permanently removes the slug you own and detaches its custom hostnames. The slug becomes free. |
rotate_token | Use this after a leak, or to retire a token an agent should stop using. Issues a new token for the same principal. Every site carries over. The previous token stops working immediately unless overlap_seconds is set (0 to 300). During that window both tokens work. After it, the previous token returns |
revoke_token | Use this when a token has leaked and you do not want a replacement yet. scope "current" (default) revokes the token you sent. scope "all" revokes every token for that principal, including any overlap window. A later call with a revoked token returns 401 token_revoked, not 403 suspended. Sites stay o |
whoami | Use this to read your plan, limits, how many sites your token owns, and how many custom hostnames it has attached. |
get_upgrade_link | Use this only when the user asks for higher limits. Returns a Stripe Checkout URL for Hobby ($3/mo) or Pro ($15/mo) tied to your token. A human must open it and pay; nothing is charged by this call. |
list_versions | Use this to see every retained version of a slug you own, newest first. Each entry has version, created_at, file_count, bytes, kind (publish, merge, or restore), restored_from, and a public permalink. Free keeps 10, Hobby 50, Pro unlimited. |
restore_version | Use this to undo a publish. Creates a new version whose files equal the retained version, without re-uploading. Pass expected_version (the live vN). A mismatch returns version_conflict and does not write. The old permalink keeps serving until retention drops it. |
add_domain | Use this when the user wants their own hostname on a site they own. Adds the hostname to the project and returns dns_records to create: a CNAME for a subdomain, an A record or an ALIAS record for an apex (create one, not both), and every TXT record. Status starts at pending_dns until DNS and the cer |
list_domains | Use this to list custom hostnames on one slug, or on every site your token owns when slug is omitted. Status is the last checked value. Call domain_status to refresh it. |
remove_domain | Use this when the user wants a hostname detached. Removes it from the project so requests to that host no longer serve the site. |
domain_status | Use this after add_domain, once DNS might have propagated. Refreshes verification, DNS config, and certificate state. status is pending_dns, verifying, issuing_cert, active, or error. dns_records are the records to create. An error includes the reason. |
plan_upload | Use this when the site is larger than about 4 MB, or when you already know each file's sha256. Send a manifest of {path, sha256, size, content_type?}. Returns which hashes are already stored and a direct upload URL for each missing hash. Upload those bytes, then call finalize_upload with the session |
finalize_upload | Use this after plan_upload, once every missing blob has been uploaded. Checks hashes, screens the new bytes, and commits one version under the slug lock. A stale expected version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An expired session returns session_expired |
get_manifest | Public. Returns the canonical manifest (paths, sha256, sizes, version, slug, created_at) and an Ed25519 signature, or signature null when the server has no signing key. Omit version for the live site. Verify with the keys at /.well-known/deed-signing-keys.json, then hash the files served at site_url |
site_analytics | Owner-only cookieless counts for a slug: views per UTC day, top paths, top referrer hosts, and AI crawler counts by user-agent family. from and to are YYYY-MM-DD (default last 7 days, max 90). The accuracy field describes under-counting. No raw IP or full user agent is stored. |
set_site_access | Hobby and Pro only. Sets a password (8 to 200 characters) or clears it when password is null. The hash is scrypt. Visitors get a host-only HttpOnly Secure cookie. Version permalinks and custom domains of the site are gated too. Free returns plan_required. Clearing is allowed on every plan. |
create_webhook | Registers an http(s) URL for site.published, site.version_restored, site.deleted, site.taken_down, domain.active, and report.received. The HMAC secret is returned once. Free 1, Hobby 5, Pro 20. Private, internal, and localhost targets are rejected. Delivery is best-effort: 3 attempts, then stop. |
list_webhooks | Lists webhook URLs for your token. Secrets are not included. |
delete_webhook | Deletes one webhook by id from list_webhooks or create_webhook. |