page.deed/deed-page

deed.page

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

Endpointhttps://deed.page/mcp (streamable-http)
Registry version1.9.10
Now28 tools · grade D (63) · pin ts_a58c4c40af4997986ac92cca16ac7de0 · protocol 2025-06-18
First / last listed2026-11-02 03:28 UTC / 2026-11-02 03:28 UTC
Grade over time2026-11-02: D (63), 28 tools

Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.

Timeline

First listing · 2026-11-02 03:28 UTC
28 tools, grade D (63)

Tools: publish_site update_site get_site list_sites delete_site rotate_token revoke_token agent_seats whoami get_upgrade_link claim_share_credit list_versions restore_version add_domain list_domains remove_domain domain_status plan_upload finalize_upload get_manifest site_analytics site_visits set_site_access set_listing set_badge create_webhook list_webhooks delete_webhook

Current tools (28)

publish_sitePublishes files to a live permanent URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, via, heard_from, token, listed, category, tags, title, and description. Paths are stored exactly. Returns url, path_url, slug, version, listing, analytics_url (the owner visit page on deed.page), and token on the first anonymous publish. On deed.page, url and p
params: slug, files*, spa, ttl_seconds, merge, expected_version, via, heard_from, listed, category, tags, title, description, token
update_siteReplaces 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, via, token, listed, category, tags, title, and description. Returns url, path_url, slug, listing, and a new version. When expected_version does not match the live version, the result is version_conflict and nothing is writ
params: slug*, files*, spa, merge, expected_version, via, listed, category, tags, title, description, token
get_siteReturns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required.
params: slug*
list_sitesReturns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header.
params: token
delete_sitePermanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token.
params: slug*, token
rotate_tokenIssues 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.
params: overlap_seconds, token
revoke_tokenRevokes 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.
params: scope, token
agent_seatsPro only: named tokens for more agents on one account, up to 5. Each seat has a label and its own token, shares the owner's sites, and can be revoked without touching the others. action "list" shows seats (any token). action "create" needs the owner token and a label; the new seat token is returned once. action "revoke" needs seat_id; the owner token revokes any seat, a seat token only itself. Sea
params: action, label, seat_id, token
whoamiReturns the plan (plan.id is free, hobby, or pro), limits, the number of sites the token owns, and the number of custom hostnames attached. Use it to confirm a plan change after payment. Input: token.
params: token
get_upgrade_linkCreates a Stripe Checkout URL that upgrades this token's owner to Hobby ($3/mo) or Pro ($15/mo). Call it when the user asks to upgrade, or right after a tool error that has upgrade_url / user_message (a plan limit). Show the returned upgrade_url (a 30-day link that opens Stripe Checkout; checkout_url is the raw Stripe page and lasts 24 hours) or user_message, and the price, to the user. Calling it
params: plan, slug, interval, how_heard, upgrade_trigger, token
claim_share_creditFree plan only. Pass the URL of the user's public post about deed.page on X or Reddit. Grants, each one-time: (1) the share credit: the post is public, mentions deed.page or links to a deed.page site, is from the last 30 days, and was not claimed before; Free limits rise by 25 sites and to 50 MB per site. (2) The badge-free month: an X post that includes a link to deed.page or a *.deed.page site a
params: url*, token
list_versionsReturns 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.
params: slug*, token
restore_versionCreates 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.
params: slug*, version*, expected_version, token
add_domainAttaches 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. A new attach to a site
params: slug*, domain*, token
list_domainsReturns 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.
params: slug, token
remove_domainRemoves 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.
params: domain*, slug, token
domain_statusReturns 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.
params: slug*, domain*, token
plan_uploadAccepts a file manifest and returns which hashes are already stored, a direct upload URL for each missing hash, a session id, and commands: one curl PUT per missing blob plus a finalize line that uses $DEEDPAGE_TOKEN. Inputs: files as {path, sha256, size, content_type?}, and optional slug, spa, merge, ttl_seconds, expected_version, via, heard_from, and token. Applies when the files are larger than
params: slug, files*, spa, merge, ttl_seconds, expected_version, via, heard_from, token
finalize_uploadChecks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, via, heard_from, and token. A stale expected_version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An expired session returns session_expired.
params: session*, expected_version, via, heard_from, token
get_manifestReturns 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.
params: slug*, version
site_analyticsReturns 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; up to 90 days per request on Free and Hobby, 365 on Pro), optional format (json, or csv on Pro), and token. A longer range or csv below Pro returns plan_required with a Pro upgrade l
params: slug*, from, to, format, token
site_visitsReturns owner-only human HTML page views and daily unique visitors for a slug. Inputs: slug, optional from and to as YYYY-MM-DD (default the plan window: 7 days on Free, 30 on Hobby, 90 on Pro), and token. Bots, empty or script user agents, headless browsers, and assets are not page views. A longer range returns plan_required with an upgrade link. No raw IP and no full user agent are stored. The s
params: slug*, from, to, token
set_site_accessChanges the access setting stored for a slug on deed.page. Inputs: slug, password, and token. password is 8 to 200 characters, or an empty string (or null) to clear the password. The call writes a scrypt hash into the site record on deed.page, or removes that hash, and contacts no outside system. Setting a password is available on Hobby and Pro; Free returns plan_required. Clearing is allowed on e
params: slug*, password*, token
set_listingSets or clears the public gallery listing for a slug. Inputs: slug, listed, and when listed is true a category, title, description, and optional tags (at most 5), plus token. Returns listed, status, category, tags, title, and description. listed false removes the slug from the gallery immediately. Password-protected sites cannot be listed. A new version of the site runs the gallery checks again. T
params: slug*, listed*, category, tags, title, description, token
set_badgeFree-plan sites show a small 'Published with deed.page' link in the bottom-right corner; Hobby and Pro never show it. Inputs: show (boolean), optional slug, and token. With slug, the setting applies to that site; without slug, it applies to every site of the token. Only a paid plan removes the badge: on Free, show false returns plan_required with the Hobby price and a signed upgrade_url in message
params: show*, slug, token
create_webhookRegisters 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
params: url*, events, token
list_webhooksReturns the webhook URLs registered for the token. Secrets are not included. Input: token.
params: token
delete_webhookDeletes one webhook. Inputs: id (whk_...) and token.
params: id*, token

Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.