deed.page
Publique sites estáticos em URLs permanentes com uma única chamada: sem conta, código de e-mail ou link de reivindicação. Sete ferramentas MCP para publicar, atualizar e gerenciar.
Servidor MCP hospedado
npx add-mcp 'https://deed.page/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Documentação do deed.page
Publique uma escritura: uma única requisição transforma arquivos em uma URL pública permanente. Feito para agentes; nenhuma etapa humana em qualquer lugar.
Publique uma pasta ou alguns arquivos em uma URL HTTPS viva e permanente com um único PUT ou POST. Sem conta, sem código de e-mail, sem link de reivindicação, sem expiração em 24 horas. O agente escolhe o slug. Use quando for solicitado a "publicar isto", "hospedar isto", "implantar isto", "compartilhar isto na web", "criar um site", "colocar isto online", "criar uma página web" ou "gerar uma URL", ou quando um link anônimo de 24 horas não for suficiente.
base_url: https://deed.page openapi: https://deed.page/openapi.json mcp: https://deed.page/mcp skill: https://deed.page/skill.md
Início rápido
echo '<!doctype html><h1>Olá</h1>' > index.html
curl -T index.html "https://deed.page/v1/sites?slug=hello"
Resposta (201 na criação, 200 na atualização):
{"ok":true,"url":"https://hello.deed.page/","path_url":"https://deed.page/s/hello/","slug":"hello","version":"v1","unchanged":false,"permanent":true,"expires_at":null,"bytes":31,"files":1,"plan":"free","token":"deed_tok_...","token_note":"Mostrado uma vez..."}
url é a forma de subdomínio quando você publica através do deed.page; path_url (/s/{slug}/) sempre funciona.
Autenticação
- Nenhuma para publicar. Sem conta, código de e-mail ou link de reivindicação.
- A primeira publicação sem token gera um e o retorna uma única vez como
token. Salve-o (por exemplo,export DEEDPAGE_TOKEN=deed_tok_...). - Envie
Authorization: Bearer $DEEDPAGE_TOKENpara atualizar, listar, excluir ou fazer upgrade. Publicar novos slugs com o mesmo token os mantém sob um único proprietário. - Perdeu o token e não pode atualizar esse slug. Não há recuperação por e-mail porque nunca coletamos um.
Publicação
PUT e POST são a mesma operação em /v1/sites e /v1/sites/{slug} (também sob /api/v1/).
Corpos:
- tarball gzip ou tar simples (
curl -T site.tar.gz). Um diretório wrapper é removido. - um único arquivo HTML (
curl -T index.html) torna-se index.html. multipart/form-data: um arquivo, ou muitos arquivos (campo filename = caminho).application/json:{"files":{"index.html":"<h1>hi</h1>","logo.png":{"base64":"iVBOR..."}}}
Cabeçalhos (ou parâmetros de consulta):
| Cabeçalho | Consulta | Significado |
|---|---|---|
| X-Slug | slug | Slug para publicar (1-63 caracteres, a-z 0-9 -). Aleatório se omitido. |
| Authorization | Token Bearer para atualizações. | |
| X-Merge | merge | 1 = adicionar estes arquivos à versão atual em vez de substituí-la. |
| X-Spa | spa | 1 = servir index.html para caminhos desconhecidos. |
| X-Ttl | ttl | Segundos até o site expirar. Omita para permanente. |
| Idempotency-Key | Reproduz a mesma resposta para tentativas. | |
| X-Client | Nome do seu harness (cursor, claude-code, codex...). |
Tarball de diretório:
tar -C ./site -czf /tmp/site.tar.gz .
curl -T /tmp/site.tar.gz "https://deed.page/v1/sites?slug=my-app" -H "Authorization: Bearer $DEEDPAGE_TOKEN"
JSON:
curl -X POST "https://deed.page/v1/sites" -H 'content-type: application/json' \
-d '{"slug":"my-app","files":{"index.html":"<!doctype html><h1>oi</h1>"}}'
Sites grandes
Cada corpo de requisição é limitado a 4 MB (um limite de plataforma serverless). Envie o primeiro bloco normalmente, depois o restante com X-Merge: 1 e seu token; cada publicação de merge adiciona ou sobrescreve caminhos e incrementa a versão. O tamanho total por site é definido pelo seu plano.
Servindo
https://{slug}.deed.page/ehttps://deed.page/s/{slug}//serve index.html;/abouttenta about, about.html, about/index.html.404.htmlna raiz é usado para erros. O modo SPA serve index.html em vez disso.- Uma pasta sem index.html mostra uma listagem de arquivos.
Endpoints
| Método | Caminho | Auth | O que faz |
|---|---|---|---|
| PUT/POST | /v1/sites | opcional | Publicar (slug via cabeçalho/consulta/corpo) |
| PUT/POST | /v1/sites/{slug} | opcional | Publicar no slug |
| GET | /v1/sites | Bearer | Listar seus sites |
| GET | /v1/sites/{slug} | nenhum | Metadados públicos do site |
| DELETE | /v1/sites/{slug} | Bearer | Excluir seu site |
| GET | /v1/whoami | opcional | Plano e limites |
| POST | /api/v1/billing/checkout | Bearer | URL do Stripe Checkout para hobby ou pro |
| POST | /api/v1/billing/portal | Bearer | URL do portal de cobrança do Stripe |
| GET | /api/v1/health | nenhum | Verificação de saúde |
| POST | /mcp | opcional | MCP (JSON-RPC sobre HTTP Streamable) |
MCP
Endpoint: https://deed.page/mcp (HTTP Streamable, respostas JSON, sem SSE). Ferramentas: publish_site, update_site, get_site, list_sites, delete_site, whoami, get_upgrade_link. Passe seu token como um cabeçalho Authorization: Bearer ou como o argumento token.
Claude Code:
claude mcp add --transport http deed-page https://deed.page/mcp
Cursor / configuração JSON genérica:
{"mcpServers":{"deed-page":{"url":"https://deed.page/mcp"}}}
Erros
Todo erro é JSON: {"code","message","retry_after","docs_url","suggestion?"}.
| Código | Status | Significado |
|---|---|---|
| slug_taken | 409 | Outra pessoa o possui; suggestion tem um slug livre. |
| slug_invalid / slug_reserved | 400 | Escolha outro slug. |
| unauthorized | 401 | Token ausente ou desconhecido. |
| forbidden | 403 | O token não possui esse slug. |
| quota_sites | 403 | Limite de sites do plano atingido. |
| quota_bytes | 413 | Site maior do que seu plano permite. |
| request_too_large | 413 | Corpo acima de 4 MB; use X-Merge. |
| rate_limited | 429 | Veja retry_after segundos. |
| invalid_archive / empty_site / bad_request | 400 | Corrija o corpo. |
Limites e planos
| Plano | Preço | Sites | Por site | Publicações/hora |
|---|---|---|---|---|
| Grátis | $0 | 25 | 25 MB | 60 |
| Hobby | $3/mês | 250 | 100 MB | 300 |
| Pro | $15/mês | 2.500 | 500 MB | 1.200 |
Todo plano: sites permanentes, sem e-mail, sem link de reivindicação, MCP, URLs de subdomínio e caminho. Planos pagos são cobrados mensalmente pelo Stripe; cancele a qualquer momento no portal de cobrança.
Regras de conteúdo
Apenas arquivos estáticos públicos. Sem malware, phishing, coleta de credenciais ou conteúdo ilegal. Removemos slugs que quebram essas regras. Denuncie abuso para ops@avatar33.com.
Instalar a skill
mkdir -p ~/.claude/skills/deed-page && curl -fsSL https://deed.page/skill.md -o ~/.claude/skills/deed-page/SKILL.md
Operador
deed.page é operado pela Avatar 8 LLC. Contato: ops@avatar33.com.