Search / page.deed/deed-page
deed.page
R0· no sign-inPublish permanent static sites via MCP/REST. 23 tools. No account or claim link.
v1.9.0 · active · website · descriptor JSON · versions
Search / page.deed/deed-page
R0· no sign-inPublish permanent static sites via MCP/REST. 23 tools. No account or claim link.
v1.9.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "Bearer ${DEED_PAGE_TOKEN}"
}
}
}
}claude mcp add --transport http deed-page https://deed.page/mcp --header "Authorization: Bearer ${DEED_PAGE_TOKEN}"[mcp_servers.deed-page]
url = "https://deed.page/mcp"
bearer_token_env_var = "DEED_PAGE_TOKEN"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"deed-page": {
"type": "remote",
"url": "https://deed.page/mcp",
"enabled": true,
"headers": {
"Authorization": "Bearer {env:DEED_PAGE_TOKEN}"
}
}
}
}{
"mcpServers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "Bearer ${DEED_PAGE_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=deed-page&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vZGVlZC5wYWdlL21jcCIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJlYXJlciAke0RFRURfUEFHRV9UT0tFTn0ifX0%3D"
}{
"servers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "Bearer ${DEED_PAGE_TOKEN}"
}
}
}
}{
"mcpServers": {
"deed-page": {
"httpUrl": "https://deed.page/mcp",
"headers": {
"Authorization": "Bearer ${DEED_PAGE_TOKEN}"
}
}
}
}extensions:
"deed-page":
enabled: true
name: "deed-page"
type: streamable_http
uri: "https://deed.page/mcp"
headers:
"Authorization": "Bearer ${DEED_PAGE_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${DEED_PAGE_TOKEN}. The registry never accepts secret values.
protocol.modernnewest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations23 of 23 tools declare readOnlyHint or destructiveHinttools.directory_hints19 of 23 tools declare all four hints; missing: whoami (idempotentHint); get_site (idempotentHint); list_sites (idempotentHint); …tools.token_costabout 5,195 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes56 tool changes in 30 daysstability.rug_pull9 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagefinalize_uploadchangeddescription, input schemaChecks 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.
Checks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, via, and token. A stale expected_version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An expired session returns session_expired.
plan_uploadchangeddescription, input schemaAccepts 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 unchanged.
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, via, 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 unchanged.
update_sitechangeddescription, input schemaReplaces 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 without expected_version.
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, via, 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 without expected_version.
publish_sitechangeddescription, input schemaPublishes 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. When expected_version does not match the live version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even without expected_version. Malware, executables, and credential-harvesting pages return content_rejected and are not stored. .bin is blocked by file type (it often has no MZ or ELF header). A raw octet-stream body is screened as one file.
Publishes files to a live permanent URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, via, 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. When expected_version does not match the live version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even without expected_version. Malware, executables, and credential-harvesting pages return content_rejected and are not stored. .bin is blocked by file type (it often has no MZ or ELF header). A raw octet-stream body is screened as one file.
set_site_accesschangeddescriptionmeaning changedSets 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 gate.
Changes the access setting stored for a slug on deed.page. Inputs: slug, password, and token. password is 8 to 200 characters, 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 every plan.
create_webhookchangedannotationsset_site_accesschangedannotationsadd_domainchangedannotationspublish_sitechangedannotationsdelete_webhookchangeddescription, annotationsmeaning changedDeletes one webhook by id from list_webhooks or create_webhook.
Deletes one webhook. Inputs: id (whk_...) and token.
Showing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-100% +updated-10d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://deed.page/mcp streamable-http | none | yes | 100% | 357 ms | 2025-06-18 | 2026-10-19 |
add_domaindestructive | 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. |
create_webhookdestructive | 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 documentation: https://deed.page/docs. |
delete_sitedestructive | Permanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token. |
delete_webhookdestructive | Deletes one webhook. Inputs: id (whk_...) and token. |
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. |
finalize_uploaddestructive | Checks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, via, 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. |
get_siteread-only | Returns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required. |
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_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. |
list_sitesread-only | Returns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header. |
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. |
list_webhooksread-only | Returns the webhook URLs registered for the token. Secrets are not included. Input: token. |
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, via, 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 unchanged. |
publish_sitedestructive | Publishes files to a live permanent URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, via, 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. When expected_version does not match the live version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even without expected_version. Malware, executables, and credential-harvesting pages return content_rejected and are not stored. .bin is blocked by file type (it often has no MZ or ELF header). A raw octet-stream body is screened as one file. |
remove_domaindestructive | 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. |
restore_versiondestructive | 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. |
revoke_tokendestructive | 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. |
rotate_tokendestructive | 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. |
set_site_accessdestructive | Changes the access setting stored for a slug on deed.page. Inputs: slug, password, and token. password is 8 to 200 characters, 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 every plan. |
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. |
update_sitedestructive | 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, via, 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 without expected_version. |
whoamiread-only | Returns the plan, limits, the number of sites the token owns, and the number of custom hostnames attached. Input: token. |
Schemas: list_tools.
{
"name": "page.deed/deed-page",
"icons": [
{
"src": "https://deed.page/icon.svg",
"sizes": [
"any"
],
"mimeType": "image/svg+xml"
}
],
"title": "deed.page",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://deed.page/mcp",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"isSecret": true,
"description": "Optional. 'Bearer deed_tok_…' token returned by your first publish_site call. Tools also accept it as a 'token' argument."
}
]
}
],
"version": "1.9.0",
"websiteUrl": "https://deed.page",
"description": "Publish permanent static sites via MCP/REST. 23 tools. No account or claim link."
}