deed.page

page.deed/deed-page

Publish permanent static sites via MCP/REST. 23 tools. No account or claim link.

Yes, your AI can use this right now.Answered a live MCP handshake in 517 ms with no sign-in needed and exposes 23 tools.

Connect it

Settings → Connectors → Add custom connector
URL: https://deed.page/mcp

23 tools, verified live

Pulled straight from the server with tools/list on 2026-10-17.
publish_sitecan modify

Publishes files to a live permanent URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, and token. Paths are stored exactly. Returns url, path_url, slug, version, and token on the first anonymous publish. On deed.page, url and path_url are both https://{slug}.deed.page/. A lost token has no recovery unless an optional recovery email was attached.

update_sitecan modify

Replaces the files of a slug owned by the token, or, when merge is true, adds and overwrites only the paths sent. Inputs: slug, files, and optional spa, merge, expected_version, and token. Returns url, path_url, slug, and a new version. When expected_version does not match the live version, the result is version_conflict and nothing is written. Two racing updates return version_conflict even witho

get_siteread-only

Returns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required.

list_sitesread-only

Returns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header.

delete_sitecan modify

Permanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token.

rotate_tokencan modify

Issues a new token for the same principal. Every site carries over. Inputs: token, and optional overlap_seconds from 0 to 300. The previous token stops working immediately when overlap_seconds is omitted or 0. During a non-zero overlap window both tokens work. After that window the previous token returns 401 token_revoked. The new token is returned once.

revoke_tokencan modify

Revokes owner tokens. Inputs: token, and optional scope. Scope "current" (the default) revokes the token that was sent. Scope "all" revokes every token for that principal, including any overlap window. A later request with a revoked token returns 401 token_revoked, which is distinct from 403 suspended. Sites stay online. Without a recovery email, a revoked token cannot update them.

whoamiread-only

Returns the plan, limits, the number of sites the token owns, and the number of custom hostnames attached. Input: token.

get_upgrade_linkread-only

Returns a Stripe Checkout URL for the Hobby plan ($3/mo) or the Pro plan ($15/mo), tied to the token. Inputs: plan (hobby or pro) and token. The call does not charge; payment happens on the returned Checkout page.

list_versionsread-only

Returns every retained version of a slug owned by the token, newest first. Inputs: slug and token. Each entry includes version, created_at, file_count, bytes, kind (publish, merge, or restore), restored_from, and a public permalink. Free keeps 10 versions, Hobby 50, Pro unlimited.

restore_versioncan modify

Creates a new version whose files equal a retained version, without uploading those files again. Inputs: slug, version, optional expected_version, and token. When expected_version does not match the live version, the result is version_conflict and nothing is written. The previous permalink keeps serving until retention drops it.

add_domaincan modify

Attaches a hostname to a slug owned by the token and returns the DNS records to create: a CNAME for a subdomain, an A record or an ALIAS record for an apex (one of those, not both), and every TXT record. Inputs: slug, domain, and token. Status starts at pending_dns until DNS and the certificate are ready. Free allows 1 hostname, Hobby 3, Pro 20. deed.page names are rejected.

list_domainsread-only

Returns custom hostnames on one slug, or on every site the token owns when slug is omitted. Inputs: token, and optional slug. Status is the last checked value.

remove_domaincan modify

Removes a hostname so requests to that host no longer serve the site. Inputs: domain, optional slug, and token. When slug is set, the hostname must already be attached to that slug.

domain_statusread-only

Returns the verification status of a custom domain and refreshes verification, DNS config, and certificate state. Inputs: slug, domain, and token. status is pending_dns, verifying, issuing_cert, active, or error. dns_records are the records to create. An error includes the reason.

plan_upload

Accepts a file manifest and returns which hashes are already stored, a direct upload URL for each missing hash, and a session id. Inputs: files as {path, sha256, size, content_type?}, and optional slug, spa, merge, ttl_seconds, expected_version, and token. Applies when the files are larger than about 4 MB, or when each sha256 is already known. Does not publish by itself. Per-site size limits are u

finalize_uploadcan modify

Checks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, and token. A stale expected_version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An expired session returns session_expired.

get_manifestread-only

Returns the canonical manifest for a site version: paths, sha256, sizes, version, slug, and created_at, plus an Ed25519 signature. signature is null when the server has no signing key. Inputs: slug, and optional version. When version is omitted, the result is the live site. Public keys are published at /.well-known/deed-signing-keys.json. No token is required.

site_analyticsread-only

Returns owner-only cookieless counts for a slug: views per UTC day, top paths, top referrer hosts, and AI crawler counts by user-agent family. Inputs: slug, optional from and to as YYYY-MM-DD (default the last 7 days, maximum 90), and token. The accuracy field describes under-counting. No raw IP or full user agent is stored.

set_site_accesscan modify

Sets a site password or clears it. Inputs: slug, password, and token. password is 8 to 200 characters, or null to clear the password. Setting a password is available on Hobby and Pro; Free returns plan_required. Clearing is allowed on every plan. The stored hash is scrypt. Visitors receive a host-only HttpOnly Secure cookie. Version permalinks and custom domains of the site are covered by the same

create_webhookcan modify

Registers an http or https URL for the events site.published, site.version_restored, site.deleted, site.taken_down, domain.active, and report.received. Inputs: url, optional events, and token. Returns the webhook id and an HMAC secret once. Free allows 1 webhook, Hobby 5, Pro 20. Private, internal, and localhost targets are rejected. Delivery is best-effort, with up to 3 attempts. API documentatio

list_webhooksread-only

Returns the webhook URLs registered for the token. Secrets are not included. Input: token.

delete_webhookcan modify

Deletes one webhook. Inputs: id (whk_...) and token.

Alternatives in Other

Compare →
Try “Notion”, “Stripe”, “create invoice”, “browser”