
deed-page
page.deed/deed-page
Publish permanent static sites via MCP/REST. 28 tools. No account or claim link.
Documentation
deed.page MCP server and agent skill
deed.page publishes a file or folder to a permanent https://<slug>.deed.page/ URL in one call. No account, API key, email code, or claim link. This repo documents the hosted remote MCP server (https://deed.page/mcp, see MCP server) and contains the deed.page agent skill, which does the same with one curl request.
It works with Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, Grok Build, Grok Bot, Hermes Agent, and any agent that reads SKILL.md files (agentskills.io format).
- Website: https://deed.page
- Docs: https://deed.page/docs
- llms.txt: https://deed.page/llms.txt
- OpenAPI: https://deed.page/openapi.json
- MCP server: https://deed.page/mcp
MCP server
deed.page runs a hosted remote MCP server. Agents use it to publish a file or folder to a permanent https://<slug>.deed.page/ URL and then update, version, password-protect, or delete it. The source code is not in this repo; the server is hosted at the URL below.
| URL | https://deed.page/mcp |
| Transport | Streamable HTTP |
| MCP Registry name | page.deed/deed-page |
| Auth | None to start. See Authentication. |
Configure
VS Code / GitHub Copilot (.vscode/mcp.json):
{
"servers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp"
}
}
}
Claude Code:
claude mcp add --transport http deed-page https://deed.page/mcp
Any other MCP client: add a remote (Streamable HTTP) server with the URL https://deed.page/mcp.
Authentication
No account, API key, or OAuth is needed. The first publish_site call returns an owner token (deed_tok_...) once. That token is the key to update or delete the sites it owns. Send it back in one of two ways:
- as the optional
Authorization: Bearer deed_tok_...header, or - as the
tokenargument of a tool.
Keep the token secret. rotate_token replaces it and revoke_token revokes it.
Tools
28 tools:
| Tool | What it does |
|---|---|
publish_site | Publish files to a live permanent URL at a slug. The first call returns the owner token. |
update_site | Replace a site's files, or merge in only the paths sent. |
get_site | Check whether a slug is live, with its URL, version, size, and timestamps (no token needed). |
list_sites | List every live site the token owns. |
delete_site | Permanently remove a site. |
list_versions | List a site's retained versions. |
restore_version | Make a retained version live again. |
get_manifest | Get the signed (Ed25519) manifest of a site version. |
plan_upload | Plan a large upload: returns which files are already stored and an upload URL for each missing one. |
finalize_upload | Commit a large upload as a new version. |
set_site_access | Set or clear a site password. |
set_listing | List a site in the public gallery, or remove it. |
site_analytics | Cookieless view counts, top paths, referrers, and AI crawler counts for a site. 90 days per request on Free and Hobby; 365 days and CSV on Pro. |
site_visits | Owner-only human page views and daily unique visitors for a slug. 7 days on Free, 30 on Hobby, 90 on Pro. |
add_domain | Attach a custom domain and get the DNS records to create. |
list_domains | List custom domains. |
domain_status | Check and refresh a custom domain's verification and certificate status. |
remove_domain | Remove a custom domain. |
whoami | Show the plan, limits, and usage for the token. |
get_upgrade_link | Get a checkout link for a paid plan. |
set_badge | Set the "Published with deed.page" badge. Only a paid plan (Hobby $3/mo or Pro) removes it. |
claim_share_credit | Free only, once per token: send the URL of the user's public X or Reddit post about deed.page for +25 sites and 50 MB per site. An X post that links to deed.page (at most 7 days old) also turns the badge off for 30 days, once per account. |
rotate_token | Issue a new owner token; every site carries over. |
revoke_token | Revoke the current token or all tokens. |
agent_seats | Pro: list, create, or revoke up to 5 named agent seats (separate tokens on one owner). |
create_webhook | Register a webhook for site and domain events. |
list_webhooks | List registered webhooks. |
delete_webhook | Delete a webhook. |
Use
Ask your agent to "publish this folder to deed.page" or "host this report and give me a link". The agent calls publish_site with the files and answers with the live URL. A request that only says "make a website" or "build a page" stays a local draft until you ask to publish or confirm the public URL and the exact file list. An unattended run publishes only when its instructions explicitly say to. To change the site later, it calls update_site with the same slug and token.
Free plan: 25 sites, 25 MB per site, 60 publishes per hour. Free sites are public, so do not publish secrets. Static files only. Free sites show a small "Published with deed.page" badge; Hobby ($3/mo) and Pro never do.
Skill and plugins
The skill is skills/deed-page/SKILL.md. Since 1.7.0 it also ships two optional scripts in skills/deed-page/scripts/: publish.sh publishes a file or a clean output folder and, above 4 MB, hands off to publish-large.mjs (Node 18+), which uploads through the manifest flow (/v1/uploads). Both skip sensitive and repo-metadata paths and refuse a project root that has no dist, build, out, public, or _site directory unless --allow-root is set. The same scripts are also published at https://deed.page/cli/. This plugin always runs the bundled copies in skills/deed-page/scripts/. The repo is also a plugin that bundles the skill with the hosted deed.page MCP server, with manifests for each agent:
| File | Format |
|---|---|
plugin.json, mcp.json | Agent Plugins 1.0 (Codex, Cursor, Copilot CLI, Kiro) |
.grok-plugin/plugin.json | Grok Build |
.cursor-plugin/plugin.json | Cursor |
.codex-plugin/plugin.json, .agents/plugins/marketplace.json | Codex |
.claude-plugin/plugin.json, .claude-plugin/marketplace.json, .mcp.json | Claude Code |
gemini-extension.json | Gemini CLI |
Quick install for any agent:
npx skills add f-o-x11/deed-page-skill
Install
Any agent (skills.sh)
npx skills add f-o-x11/deed-page-skill
Add -g to install for all projects, or -a claude-code, -a codex, -a cursor, or -a hermes-agent to pick the agent.
Claude Code
As a plugin:
claude plugin marketplace add f-o-x11/deed-page-skill
claude plugin install deed-page@deed-page
Or inside Claude Code:
/plugin marketplace add f-o-x11/deed-page-skill
/plugin install deed-page@deed-page
Or as a plain skill:
git clone --depth 1 https://github.com/f-o-x11/deed-page-skill /tmp/deed-page-skill
mkdir -p ~/.claude/skills && cp -r /tmp/deed-page-skill/skills/deed-page ~/.claude/skills/
Codex
As a plugin (skill + MCP server):
codex plugin marketplace add f-o-x11/deed-page-skill
Then install deed-page from the plugin directory. As a plain skill:
npx skills add f-o-x11/deed-page-skill -a codex -g
Or inside Codex: $skill-installer install https://github.com/f-o-x11/deed-page-skill/tree/main/skills/deed-page
Cursor
As a plain skill:
npx skills add f-o-x11/deed-page-skill -a cursor
GitHub Copilot CLI
copilot plugin marketplace add f-o-x11/deed-page-skill
copilot plugin install deed-page@deed-page
Grok Build
Install this repo as a plugin. The repo root is the plugin. --trust turns on the bundled MCP server (https://deed.page/mcp); an untrusted plugin leaves that server inactive.
grok plugin install f-o-x11/deed-page-skill --trust
MCP only, without the skill:
grok mcp add --transport http deed-page https://deed.page/mcp
When publishing from Grok Build, attribute the upload with the bundled script:
sh skills/deed-page/scripts/publish.sh ./dist --ref grok-build --client "Grok Build"
The curl fallback in the skill uses DEED_REF=grok-build for the same ?ref=. Grok Bot can use the same remote MCP server at https://deed.page/mcp. The manifest is .grok-plugin/plugin.json.
Any MCP client
Add the remote MCP server https://deed.page/mcp (Streamable HTTP, no auth needed to start; see MCP server). It is listed in the official MCP Registry as page.deed/deed-page.
Gemini CLI
gemini extensions install https://github.com/f-o-x11/deed-page-skill
This installs the skill and the deed.page MCP server (https://deed.page/mcp, no auth) from gemini-extension.json.
Hermes Agent
hermes skills install f-o-x11/deed-page-skill/skills/deed-page
Or from the deed.page well-known endpoint: hermes skills install well-known:https://deed.page/.well-known/skills/deed-page.
Or npx skills add f-o-x11/deed-page-skill -a hermes-agent -g.
What it does
Ask your agent to "publish this", "host this report", or "give me a link". The default path is the bundled publish script:
sh skills/deed-page/scripts/publish.sh ./dist --client "<agent name>"
It publishes a single file or a clean output folder (dist, build, out, public, _site), skips secrets and repo-metadata paths, refuses a project root unless --allow-root is set, and switches to the large-upload flow above 4 MB. Add --dry-run to see the exact file list first. The script prints the live URL on its last line, and the agent answers with it. The first publish returns a token once. It is the key to update or delete that site, so keep it safe.
A request that only says "make a website" or "build a page" produces a local draft. The agent shows a preview, offers to publish, and uploads only after you ask to publish or confirm the public URL and the exact file list. An unattended run publishes only when its instructions explicitly say to.
If the script can't run (no shell, or a single small file), the same publish is one curl request:
curl -sS -T index.html "https://deed.page/v1/sites?slug=my-report-7f3a2c&ref=skill-gh" -H "X-Client: <agent name>"
- Free plan: 25 sites, 25 MB per site, 60 publishes per hour.
- Free sites are public. Do not publish secrets.
- Static files only.
publish.sh sends ?ref=skill-script and the curl fallback sends ?ref=skill-gh; both tell deed.page that a publish came from this skill. It does not change what is published. Pass --ref to the script, or set DEED_REF for the skill's curl command, to override it. Grok Build uses --ref grok-build --client "Grok Build" and DEED_REF=grok-build. You can also say where you found deed.page with the optional X-Deed-Heard-From header on the first publish (at most 200 characters).
Network endpoints and credentials
License: MIT. This plugin contacts only https://deed.page (and the storage URLs that API returns for a large upload).
- Publish API:
https://deed.page/v1/sites. Folders over 4 MB usehttps://deed.page/v1/uploads, then PUT file bytes to the Vercel Blob upload URLs in that response. The MCP server ishttps://deed.page/mcp. Published sites are served athttps://<slug>.deed.page/. - No account, API key, or OAuth is required. The first publish mints an owner token (
deed_tok_...) once. The skill stores it at~/.config/deed-page/token(file mode 600, directory mode 700), loads it intoDEEDPAGE_TOKENbefore later publishes so every site stays under one owner, and sends it only tohttps://deed.pageasAuthorization: Bearer. publish.shandpublish-large.mjsskip.envand.env.*,.git,.github,.ssh,node_modules, keys,credentials.json,secrets.*, and other dotfiles (.well-knownis kept). They refuse a project root that has nodist,build,out,public, or_sitedirectory unless--allow-rootis set.- No install scripts, postinstall, or hooks. The only executable code is those two scripts, which run only when the agent publishes, and they run the bundled
scripts/publish-large.mjsrather than downloading one. See SECURITY.md.
Privacy and support
- Privacy policy: https://deed.page/privacy
- Terms: https://deed.page/terms
- Support: https://deed.page/support or ops@avatar33.com
- Security reports: ops@avatar33.com (see SECURITY.md)
License
MIT. Copyright (c) 2026 Avatar 8 LLC.
deed.page is operated by Avatar 8 LLC. Contact: ops@avatar33.com. Report abuse: https://deed.page/abuse.
No installation packages available.