deed.page
Publica sitios estáticos en URLs permanentes con una sola llamada: sin cuenta, código de correo ni enlace de reclamación. Siete herramientas MCP para publicar, actualizar y gestionar.
Servidor MCP alojado
npx add-mcp 'https://deed.page/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Documentación de deed.page
Publica una escritura: una solicitud convierte archivos en una URL pública permanente. Diseñado para agentes; sin paso humano en ningún lugar.
Publica una carpeta o algunos archivos en una URL HTTPS viva y permanente con un solo PUT o POST. Sin cuenta, sin código de correo electrónico, sin enlace de reclamación, sin caducidad de 24 horas. El agente elige el slug. Úsalo cuando te pidan "publica esto", "aloja esto", "despliega esto", "comparte esto en la web", "haz un sitio web", "pon esto en línea", "crea una página web" o "genera una URL", o cuando un enlace anónimo de 24 horas no sea suficiente.
base_url: https://deed.page openapi: https://deed.page/openapi.json mcp: https://deed.page/mcp skill: https://deed.page/skill.md
Inicio rápido
echo '<!doctype html><h1>Hola</h1>' > index.html
curl -T index.html "https://deed.page/v1/sites?slug=hello"
Respuesta (201 al crear, 200 al actualizar):
{"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":"Shown once..."}
url es la forma de subdominio cuando publicas a través de deed.page; path_url (/s/{slug}/) siempre funciona.
Autenticación
- Ninguna para publicar. Sin cuenta, código de correo electrónico o enlace de reclamación.
- La primera publicación sin token genera uno y lo devuelve una sola vez como
token. Guárdalo (por ejemploexport DEEDPAGE_TOKEN=deed_tok_...). - Envía
Authorization: Bearer $DEEDPAGE_TOKENpara actualizar, listar, eliminar o mejorar. Publicar nuevos slugs con el mismo token los mantiene bajo un solo propietario. - Si pierdes el token, no podrás actualizar ese slug. No hay recuperación por correo electrónico porque nunca recopilamos uno.
Publicación
PUT y POST son la misma operación en /v1/sites y /v1/sites/{slug} (también bajo /api/v1/).
Cuerpos:
- Tarball gzip o tar simple (
curl -T site.tar.gz). Se elimina un directorio contenedor. - Un solo archivo HTML (
curl -T index.html) se convierte en index.html. multipart/form-data: un archivo, o muchos archivos (campo filename = ruta).application/json:{"files":{"index.html":"<h1>hi</h1>","logo.png":{"base64":"iVBOR..."}}}
Encabezados (o parámetros de consulta):
| Encabezado | Consulta | Significado |
|---|---|---|
| X-Slug | slug | Slug para publicar (1-63 caracteres, a-z 0-9 -). Aleatorio si se omite. |
| Authorization | Token Bearer para actualizaciones. | |
| X-Merge | merge | 1 = agregar estos archivos a la versión actual en lugar de reemplazarla. |
| X-Spa | spa | 1 = servir index.html para rutas desconocidas. |
| X-Ttl | ttl | Segundos hasta que el sitio expire. Omitir para permanente. |
| Idempotency-Key | Reproduce la misma respuesta para reintentos. | |
| X-Client | Nombre de tu herramienta (cursor, claude-code, codex...). |
Tarball de directorio:
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>hola</h1>"}}'
Sitios grandes
Cada cuerpo de solicitud está limitado a 4 MB (un límite de plataforma serverless). Envía el primer fragmento normalmente, luego el resto con X-Merge: 1 y tu token; cada publicación combinada agrega o sobrescribe rutas y aumenta la versión. El tamaño total por sitio está determinado por tu plan.
Servicio
https://{slug}.deed.page/yhttps://deed.page/s/{slug}//sirve index.html;/aboutintenta about, about.html, about/index.html.404.htmlen la raíz se usa para errores. El modo SPA sirve index.html en su lugar.- Una carpeta sin index.html muestra un listado de archivos.
Endpoints
| Método | Ruta | Auth | Qué hace |
|---|---|---|---|
| PUT/POST | /v1/sites | opcional | Publicar (slug mediante encabezado/consulta/cuerpo) |
| PUT/POST | /v1/sites/{slug} | opcional | Publicar en slug |
| GET | /v1/sites | Bearer | Listar tus sitios |
| GET | /v1/sites/{slug} | ninguno | Metadatos públicos del sitio |
| DELETE | /v1/sites/{slug} | Bearer | Eliminar tu sitio |
| GET | /v1/whoami | opcional | Plan y límites |
| POST | /api/v1/billing/checkout | Bearer | URL de Stripe Checkout para hobby o pro |
| POST | /api/v1/billing/portal | Bearer | URL del portal de facturación de Stripe |
| GET | /api/v1/health | ninguno | Verificación de salud |
| POST | /mcp | opcional | MCP (JSON-RPC sobre HTTP Streamable) |
MCP
Endpoint: https://deed.page/mcp (HTTP Streamable, respuestas JSON, sin SSE). Herramientas: publish_site, update_site, get_site, list_sites, delete_site, whoami, get_upgrade_link. Pasa tu token como encabezado Authorization: Bearer o como argumento token.
Claude Code:
claude mcp add --transport http deed-page https://deed.page/mcp
Cursor / configuración JSON genérica:
{"mcpServers":{"deed-page":{"url":"https://deed.page/mcp"}}}
Errores
Cada error es JSON: {"code","message","retry_after","docs_url","suggestion?"}.
| Código | Estado | Significado |
|---|---|---|
| slug_taken | 409 | Otro lo posee; suggestion tiene un slug libre. |
| slug_invalid / slug_reserved | 400 | Elige otro slug. |
| unauthorized | 401 | Token faltante o desconocido. |
| forbidden | 403 | El token no posee ese slug. |
| quota_sites | 403 | Límite de sitios del plan alcanzado. |
| quota_bytes | 413 | Sitio más grande de lo que permite tu plan. |
| request_too_large | 413 | Cuerpo superior a 4 MB; usa X-Merge. |
| rate_limited | 429 | Consulta retry_after segundos. |
| invalid_archive / empty_site / bad_request | 400 | Corrige el cuerpo. |
Límites y planes
| Plan | Precio | Sitios | Por sitio | Publicaciones/hora |
|---|---|---|---|---|
| Gratis | $0 | 25 | 25 MB | 60 |
| Hobby | $3/mes | 250 | 100 MB | 300 |
| Pro | $15/mes | 2,500 | 500 MB | 1,200 |
Cada plan: sitios permanentes, sin correo electrónico, sin enlace de reclamación, MCP, URLs de subdominio y ruta. Los planes de pago se facturan mensualmente por Stripe; cancela en cualquier momento en el portal de facturación.
Reglas de contenido
Solo archivos estáticos públicos. Sin malware, phishing, recolección de credenciales o contenido ilegal. Eliminamos slugs que rompen estas reglas. Reporta abusos a ops@avatar33.com.
Instala la habilidad
mkdir -p ~/.claude/skills/deed-page && curl -fsSL https://deed.page/skill.md -o ~/.claude/skills/deed-page/SKILL.md
Operador
deed.page es operado por Avatar 8 LLC. Contacto: ops@avatar33.com.