deed.page
Publish permanent static sites via MCP/REST. 23 tools. No account or claim link.
Connect it
Settings → Connectors → Add custom connector
URL: https://deed.page/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://deed.page/mcp{
"mcpServers": {
"deed-page": {
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http deed-page https://deed.page/mcp --header "Authorization: <value>"{
"servers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}23 tools, verified live
publish_sitecan modifyPublishes 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 modifyReplaces 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-onlyReturns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required.
list_sitesread-onlyReturns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header.
delete_sitecan modifyPermanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token.
rotate_tokencan modifyIssues 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 modifyRevokes 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-onlyReturns the plan, limits, the number of sites the token owns, and the number of custom hostnames attached. Input: token.
get_upgrade_linkread-onlyReturns 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-onlyReturns 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 modifyCreates 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 modifyAttaches 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-onlyReturns 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 modifyRemoves 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-onlyReturns 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_uploadAccepts 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 modifyChecks 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-onlyReturns 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-onlyReturns 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 modifySets 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 modifyRegisters 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-onlyReturns the webhook URLs registered for the token. Secrets are not included. Input: token.
delete_webhookcan modifyDeletes one webhook. Inputs: id (whk_...) and token.
Alternatives in Other
Compare →ATAtlasB
The world railway atlas as MCP tools: notable train routes, night trains, journey times.
CICircleCIOfficialB
CircleCI's MCP server: inspect projects, runs, workflows, jobs, logs, tests, and artifacts.
BBBikefuchs — Bike Parts Price ComparisonB
Price comparison & cart optimizer for bike parts across German & Austrian shops
UPUrantia PapersB
Free, open MCP server for The Urantia Papers. 197 papers, 14,500+ paragraphs, 4,400+ entities.
RORootlyB
Incident management, on-call scheduling, and intelligent analysis powered by Rootly.
SCScanMalware.com URL ScannerB
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.