brewpage-mcp
Publica HTML, Markdown, KV, JSON y archivos en brewpage.app desde asistentes de IA.
Documentación
brewpage-mcp
Servidor MCP para BrewPage: publica y gestiona contenido HTML, KV, JSON y archivos directamente desde asistentes de IA.
Qué es BrewPage
BrewPage es una plataforma gratuita de hosting instantáneo diseñada para agentes de IA y desarrolladores. Una única solicitud POST publica HTML, Markdown, un sitio de múltiples archivos, un documento JSON o un archivo binario y devuelve su enlace HTTPS principal, sin cuentas, sin claves API ni configuración de infraestructura. Cada recurso lleva un token de propietario devuelto en el momento de la creación: úsalo para actualizar contenido en su lugar, eliminar el recurso o autenticar operaciones de listado entre sesiones. brewpage-mcp expone esta API como dieciséis herramientas MCP tipadas para que cualquier agente compatible (Claude, Codex, Gemini, Cursor, Cline) pueda publicar, actualizar, obtener y gestionar contenido HTML, JSON, KV y archivos de BrewPage sin salir de la conversación.
Inicio rápido
npx -y brewpage-mcp@1.9.3
Requiere Node.js 20 o superior. Esto inicia el servidor stdio para un cliente MCP.
Instalación
Claude Desktop
Añade a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"brewpage": {
"command": "npx",
"args": ["-y", "brewpage-mcp@1.9.3"]
}
}
}
Claude Code
Registra un servidor stdio con ámbito de proyecto:
claude mcp add --transport stdio --scope project brewpage -- npx -y brewpage-mcp@1.9.3
Esto escribe .mcp.json en la raíz del proyecto. Usa --scope user para el registro con ámbito de usuario. Consulta la guía oficial de MCP de Claude Code.
Cursor
Abre Configuración > MCP y añade:
{
"mcpServers": {
"brewpage": {
"command": "npx",
"args": ["-y", "brewpage-mcp@1.9.3"]
}
}
}
Cline (extensión de VS Code)
Abre el panel de configuración MCP de Cline y añade:
{
"brewpage": {
"command": "npx",
"args": ["-y", "brewpage-mcp@1.9.3"]
}
}
Instalación global
npm install -g brewpage-mcp@1.9.3
brewpage-mcp
Herramientas
Hay dieciséis herramientas disponibles. La creación devuelve un token de propietario; consérvalo para modificar o eliminar el recurso más adelante. Las actualizaciones (PUT/PATCH) requieren el ownerToken original. Las entradas de contraseña admitidas usan X-Password.
| Herramienta | Propósito |
|---|---|
publish_html | Publicar HTML o Markdown |
update_html | Reemplazar el contenido de la página; el formato omitido conserva el formato almacenado |
get_page | Obtener el contenido bruto de la página |
publish_file | Obtener una URL de origen y subir el archivo |
publish_site | Publicar una sola página o un paquete completo de sitio de múltiples archivos |
republish_site | Reemplazar el paquete completo del sitio en el mismo ID/enlace |
publish_json | Publicar un objeto JSON, un array o una cadena codificada en JSON |
get_json | Leer un documento JSON |
update_json | Reemplazar un documento JSON |
publish_kv | Crear un almacén KV con una entrada inicial |
set_kv | Establecer o reemplazar una clave en un almacén KV propiedad del usuario |
get_kv | Leer un valor KV |
update_hosting | Cambiar el modo de entrega elegible con token de propietario y versión de hosting |
delete_resource | Eliminar contenido HTML, JSON, KV o archivos |
search_gallery | Explorar contenido público o listar recursos propios |
get_stats | Leer estadísticas de toda la plataforma |
Las cinco herramientas de publicación aceptan deliveryMode: "path" | "subdomain" opcional, enviado solo como X-Delivery-Mode; los cuerpos JSON y multiparte creados conservan su formato existente. La visibilidad y la protección por contraseña son elecciones separadas. Un espacio de nombres omitido aún genera un espacio de nombres priv-<random> no listado; cualquiera con un enlace no listado y sin contraseña puede leerlo. public otorga elegibilidad para galería/búsqueda únicamente; el contenido protegido por contraseña permanece excluido y no listado. Las respuestas nativas protegidas o no elegibles llevan noindex; el HTML público elegible, los sitios y los archivos pueden permitir la indexación.
El servidor MCP envuelve un subconjunto del contrato REST público generado por el backend. Sus entradas conservan su comportamiento publicado: las entradas TTL aceptan de 1 a 30 días (predeterminado 15), mientras que los límites específicos del propietario del backend y las extensiones automáticas elegibles pueden afectar la caducidad real. Usa el expiresAt devuelto. get_page lee el HTML renderizado almacenado o el código/texto específico del formato desde la API; no llama al endpoint de origen original solo para propietarios ni a un visor de navegador. publish_file sube desde una URL de origen y no expone entradas de contraseña ni TTL.
Para una publicación nueva, los sitios y los espacios de nombres no públicos requieren subdominio dedicado (subdomain); se rechaza path explícito. Otras publicaciones públicas usan por defecto Promoción (path) y pueden elegir subdominio dedicado, incluido el contenido protegido por contraseña. La promoción usa una ruta de BrewPage con restricciones más estrictas de documentos activos. Cada sitio NUEVO obtiene un host específico de publicación para su paquete completo, conservando las rutas relativas/relativas a la raíz; los recursos faltantes devuelven 404, sin respaldo SPA. Los widgets de terceros pueden necesitar configuración del proveedor.
Las respuestas usan el link principal del servidor textualmente, incluida la barra raíz, y exponen routingCohort, modos real/solicitado/efectivo, deliveryModeMatched, modeLocked, hostingVersion, acceso y el managementLink de ápice de confianza cuando está presente. Nunca reconstruyas un host a partir del espacio de nombres o el ID. Los enlaces NUEVOS con contraseña son URL limpias: no añadas ?p=; los lectores de navegador desbloquean a través de la puerta de enlace de confianza. Los tokens de propietario y las llamadas API permanecen en el origen API de ápice configurado.
Cuando se omite deliveryMode para una página HTML o Markdown public, el servidor puede publicarla en su propio subdominio si la página necesita funciones de navegador que un enlace de BrewPage no proporciona. publish_html imprime entonces deliveryModeReason: "auto:<codes>" y una línea Delivery notice: con la explicación del servidor; pasa deliveryMode: "path" para mantener un enlace de BrewPage, o cámbialo más tarde con update_hosting. advisory:<codes> (de publish_html o update_html) significa que la dirección no se cambió pero se encontraron tales funciones. Los códigos están separados por comas y se extraen de storage, cookies, history, downloads, top-navigation, media-capture, pointer-lock, embeds, fullscreen. Ninguna línea aparece cuando no corresponde nada.
Un ganador de deduplicación existente conserva su URL real, cohorte y modo, incluso cuando se solicitó otro modo. Las publicaciones ANTIGUAS muestran Enlace existente, con metadatos de modo nulos; sus enlaces y comportamiento heredados permanecen sin cambios. Las actualizaciones de contenido ordinarias y la republicación de sitios conservan el hosting. Un sitio público nuevo elegible que no sea un sitio puede cambiar de modo por separado con update_hosting.
Hosting
update_hosting
Cambia un sitio público nuevo elegible que no sea un sitio entre Promoción y subdominio dedicado. Parámetros: type (html | file | json | kv), namespace, id, ownerToken, deliveryMode (path | subdomain) y expectedVersion (hostingVersion actual del servidor, entero ≥1).
La herramienta envía PATCH /api/{html|files|json|kv}/{namespace}/{id}/hosting solo para propietarios con {deliveryMode, expectedVersion} y X-Owner-Token. Los enlaces ANTIGUOS, los sitios y las publicaciones no públicas están bloqueados. El servidor devuelve 403 para autoridad de propietario no válida, 400 para hosting bloqueado y 409 para una versión obsoleta; recarga los metadatos actuales antes de reintentar. Un cambio real en pausa devuelve 503. Seleccionar el modo actual devuelve 200 sin incrementar la versión. Usa el enlace principal devuelto después de un cambio exitoso; la identidad del host de publicación se conserva en ambas direcciones.
update_hosting(type="html", namespace="public", id="aBcDeFgHiJ", ownerToken="tok_...", deliveryMode="subdomain", expectedVersion=1)
HTML
publish_html
Publica contenido HTML o Markdown en BrewPage. Devuelve una URL pública y un token de propietario.
Parámetros: content (cadena), format (HTML | MARKDOWN, predeterminado HTML), namespace (opcional: omítelo para contenido no listado; pasa public solo para elegibilidad de galería/búsqueda, excepto cuando está protegido por contraseña), password (opcional), ttlDays (1--30, predeterminado 15), filename (opcional, se usa como respaldo del título), showTopBar (booleano opcional: añade una barra de herramientas con nombre de archivo, botón de descarga y alternador de tema), deliveryMode (opcional).
El resultado incluye deliveryModeReason y una línea Delivery notice: cuando el servidor los devuelve (ver arriba).
Ejemplo de indicación que invoca esta herramienta:
"Guarda este informe HTML para poder compartir el enlace con mi equipo."
publish_html(content="<h1>Report</h1>...", format="HTML", ttlDays=15)
update_html
Actualiza una página HTML o Markdown existente en su lugar, conservando su URL corta. Requiere el ownerToken original devuelto en la creación.
Parámetros: namespace (cadena), id (cadena), content (cadena, el nuevo cuerpo), ownerToken (cadena), format (alias HTML/Markdown opcional o lenguaje de código admitido como json, yaml o typescript; si se omite, se conserva el formato almacenado).
Una actualización nunca cambia el enlace ni el modo de entrega; se imprime una línea informativa deliveryModeReason y Delivery notice: cuando el servidor las devuelve.
Ejemplo de indicación:
"Corrige el error tipográfico en el informe que publiqué antes: mismo enlace."
update_html(namespace="public", id="aBcDeFgHiJ", content="<h1>Updated</h1>...", ownerToken="tok_...")
get_page
Obtiene el contenido de una página HTML de BrewPage publicada por espacio de nombres e ID.
Devuelve el cuerpo de respuesta real como texto, incluido el HTML o código JSON creado. Los metadatos de hosting y el enlace principal provienen solo de los encabezados de respuesta del servidor; los campos JSON dentro de la publicación nunca se tratan como metadatos de plataforma. Se conserva la ruta API HTML de ápice existente.
Parámetros: namespace (cadena), id (cadena), password (opcional, si la página está protegida por contraseña).
Ejemplo de indicación:
"Recupera el contenido de mi página publicada para poder seguir editándola."
get_page(namespace="public", id="aBcDeFgHiJ")
Archivos
publish_file
Sube un archivo a BrewPage obteniéndolo desde una URL. Devuelve una URL pública y un token de propietario. Admite imágenes, PDF, video, audio, archivos de código y archivos comprimidos.
Parámetros: url (cadena, la URL de origen a obtener), namespace (opcional: omítelo para mantener el archivo privado/no listado: accesible solo por su enlace, no en la galería, no indexado en búsquedas; pasa public solo para elegibilidad de galería/búsqueda), filename (nombre de archivo personalizado opcional), deliveryMode (opcional). Esta herramienta no expone entradas de base64, contraseña ni TTL.
Ejemplo de indicación:
"Sube este PNG y dame un enlace para compartir."
publish_file(url="https://example.com/diagram.png")
Sitios
publish_site
Publica un sitio HTML de una sola página o de múltiples archivos. Pasa entryContent para una sola página o files (array de {path, content}) para un sitio de múltiples archivos. Admite protección por contraseña, TTL y agrupación por token de propietario.
Parámetros: exactamente uno de entryContent (cadena) o files no vacío (array de {path, content}), entry (ruta de archivo de entrada opcional, predeterminado index.html), namespace (opcional: omítelo para contenido no listado; public otorga elegibilidad de galería excepto cuando está protegido por contraseña), password (opcional), ttlDays (1--30, predeterminado 15), ownerToken (opcional, agrupa el sitio bajo un propietario existente), deliveryMode (opcional; los sitios nuevos requieren subdomain).
Ejemplo de indicación:
"Despliega este sitio estático con index.html y style.css."
publish_site(files=[{"path": "index.html", "content": "..."}, {"path": "style.css", "content": "..."}])
republish_site
Reemplaza el conjunto completo de archivos de un sitio propiedad del usuario en el mismo ID y enlace principal. Los archivos ausentes del nuevo paquete se eliminan; los archivos coincidentes se sobrescriben y se añaden archivos nuevos. El hosting permanece sin cambios.
Parámetros: namespace, id, ownerToken, exactamente uno de entryContent o un array files no vacío de {path, content}, entry opcional (predeterminado index.html), ttlDays (entrada de compatibilidad 1--30; se conserva la caducidad existente) y tags.
republish_site(namespace="public", id="aBcDeFgHiJ", ownerToken="tok_...", files=[{"path":"index.html","content":"<h1>Updated site</h1>"}])
JSON
publish_json
Publica un documento JSON en BrewPage. Devuelve una URL pública y un token de propietario. El cuerpo puede pasarse como una cadena JSON o como un objeto estructurado.
Parámetros: json (cadena, objeto o arreglo), namespace (opcional — omitir para contenido no listado; public otorga elegibilidad para galería/búsqueda, excepto cuando está protegido por contraseña), password (opcional), ttlDays (1--30, predeterminado 15), tags (opcional string[]), ownerToken (opcional propietario existente), deliveryMode (opcional).
Ejemplo de prompt:
"Guarda este blob de configuración como un documento JSON que pueda recuperar más tarde."
publish_json(json={"mode": "dark", "version": 3}, ttlDays=15)
get_json
Recupera un documento JSON publicado por espacio de nombres e ID.
Parámetros: namespace (cadena), id (cadena), password (opcional, enviado como X-Password si se establece).
Ejemplo de prompt:
"Lee de nuevo el documento JSON que acabo de almacenar."
get_json(namespace="public", id="aBcDeFgHiJ")
update_json
Actualiza un documento JSON existente en su lugar, conservando su URL corta. Requiere el ownerToken original.
Parámetros: namespace (cadena), id (cadena), json (cadena, objeto o arreglo), ownerToken (cadena).
Ejemplo de prompt:
"Incrementa el campo de versión en ese documento JSON a 4."
update_json(namespace="public", id="aBcDeFgHiJ", json={"mode": "dark", "version": 4}, ownerToken="tok_...")
KV
publish_kv
Crea una nueva entrada KV (clave/valor). Devuelve una URL pública y un token de propietario. La entrada KV se direcciona mediante (namespace, id, key); esta herramienta crea la entrada y emite el id generado junto con el token de propietario.
Parámetros: key (cadena), value (cadena), namespace (opcional — omitir para contenido no listado; public otorga elegibilidad para galería/búsqueda, excepto cuando está protegido por contraseña), password (opcional), ttlDays (1--30, predeterminado 15), tags (opcional string[]), ownerToken (opcional propietario existente), deliveryMode (opcional).
Ejemplo de prompt:
"Almacena el tema seleccionado para poder reutilizarlo en la próxima sesión."
publish_kv(key="theme", value="dark")
set_kv
Establece o reemplaza el valor en una ranura (namespace, id, key) existente. Requiere el ownerToken original.
Parámetros: namespace (cadena), id (cadena), key (cadena), value (cadena), ownerToken (cadena).
Ejemplo de prompt:
"Cambia el tema seleccionado a claro."
set_kv(namespace="public", id="aBcDeFgHiJ", key="theme", value="light", ownerToken="tok_...")
get_kv
Recupera el valor almacenado en (namespace, id, key).
Parámetros: namespace (cadena), id (cadena), key (cadena), password (opcional, enviado como X-Password si se establece).
Ejemplo de prompt:
"¿Qué tema almacené?"
get_kv(namespace="public", id="aBcDeFgHiJ", key="theme")
Descubrimiento
search_gallery
Explora la galería pública de páginas de BrewPage, o lista los recursos que posees. Devuelve un resultado paginado con metadatos (id, título, recuento de vistas, fecha de creación). Todos los parámetros son opcionales; sin parámetros, esto devuelve las páginas públicas más recientes.
Parámetros: q (consulta de búsqueda opcional), page (opcional, indexado desde 0), size (tamaño de página opcional), sort (opcional date | views), mine (booleano opcional — listar solo recursos propiedad de ownerToken), ownerToken (requerido solo cuando mine=true).
Ejemplo de prompt:
"¿Qué publiqué la semana pasada?"
search_gallery(mine=true, ownerToken="tok_...", sort="date")
Gestión
delete_resource
Elimina un recurso de BrewPage (página HTML, almacén KV, documento JSON o archivo) usando el token de propietario recibido en la creación.
Parámetros: type (html | kv | json | file), namespace (cadena), id (cadena), ownerToken (cadena).
Los sitios no son compatibles con esta herramienta; usa el endpoint REST de eliminación de sitios.
Ejemplo de prompt:
"Elimina la página que acabo de publicar — espacio de nombres public, id aBcDeFgHiJ."
delete_resource(type="html", namespace="public", id="aBcDeFgHiJ", ownerToken="tok_...")
get_stats
Obtén estadísticas de uso de BrewPage a nivel de plataforma (recuento de páginas, recuento de archivos, almacenamiento, totales diarios). Admite una zona horaria IANA opcional para el límite de "hoy".
Parámetros: tz (cadena de zona horaria IANA opcional, p. ej. Europe/Lisbon, predeterminado UTC).
Ejemplo de prompt:
"¿Cuántas páginas están actualmente alojadas en BrewPage?"
get_stats()
Mapeo común de consultas LLM a herramientas de BrewPage
| Consulta / intención del LLM | Herramienta | Notas |
|---|---|---|
| "Publica este HTML para poder compartirlo" | publish_html | format=HTML; guarda ownerToken |
| "Comparte estas notas de reunión como un enlace" | publish_html | format=MARKDOWN; salida renderizada legible |
| "Aloja este artefacto generado por IA" | publish_html | namespace opcional; privado/no listado por defecto; public otorga elegibilidad para galería/búsqueda excepto cuando está protegido |
| "Sube esta imagen / PDF / video" | publish_file | Se obtiene desde URL; vista previa en línea en URL corta |
| "Despliega este sitio estático" | publish_site | Pasa el arreglo files o entryContent |
| "Reemplaza el sitio que publiqué" | republish_site | Token de propietario; el paquete completo reemplaza todos los archivos existentes |
| "Dale a mi página pública una dirección dedicada" | update_hosting | NUEVO sitio público no listado; token de propietario + versión de alojamiento actual |
| "Corrige un error tipográfico en la página que compartí — mismo enlace" | update_html | Requiere ownerToken; la URL permanece igual |
| "Elimina la página que publiqué" | delete_resource | Requiere ownerToken de la creación |
| "Lee de nuevo la página que publiqué" | get_page | Devuelve contenido sin procesar para edición |
| "¿Cuántas páginas hay en BrewPage?" | get_stats | Devuelve totales de la plataforma |
| "Almacena el estado JSON entre turnos" | publish_json | Devuelve URL corta + token de propietario |
| "Lee ese documento JSON de nuevo" | get_json | Por namespace + id |
| "Actualiza el JSON que almacené" | update_json | Requiere ownerToken; conserva la URL |
| "Guarda un valor bajo una etiqueta / clave" | publish_kv | Crea una nueva ranura KV |
| "Cambia el valor KV que almacené" | set_kv | Requiere ownerToken |
| "¿Qué almacené bajo esa clave?" | get_kv | Por namespace + id + key |
| "Lista mis páginas publicadas" / "¿Qué publiqué?" | search_gallery | Establece mine=true + ownerToken |
| "Explora la galería pública de BrewPage" | search_gallery | Opcional q, sort=date|views |
Token de propietario
Cada respuesta de publicación incluye un token de propietario — la única credencial que permite actualizar o eliminar tu contenido. Guárdalo. No se puede recuperar.
- Reutilízalo con
publish_site,publish_jsonopublish_kvpara agrupar nuevos recursos bajo un propietario; las creaciones REST aceptanX-Owner-Token. - Pásalo a
delete_resourcepara eliminar contenido. - Pásalo a
search_galleryconmine=truepara listar recursos propiedad del propietario.get_pageno tiene entrada de token de propietario; las lecturas protegidas usanpassword.
Configuración
| Variable | Predeterminado | Descripción |
|---|---|---|
BREWPAGE_URL | https://brewpage.app | URL base de API autorizada; nunca un host de publicación |
Enlaces
- brewpage.app -- Plataforma en vivo
- brewpage.app/llms.txt -- Archivo de contexto LLM
- brewpage.app/llms-full.txt -- Referencia LLM completa
- Documentación de API -- Documentos interactivos
- Referencia de API -- Explorador de API Scalar
- Especificación OpenAPI -- Especificación completa
- Habilidad de Claude -- Comando de barra
/brewpage - Plugin de Brewcode -- Suite de plugins de Claude Code
Registro de cambios
1.9.3 -- 2026-10-11
- Corregir descripciones de herramientas/descubrimiento para acceso no listado, indexación nativa condicional, enlaces de compartir exactos, límites actuales, excepciones de TTL de propietario/extensión, caducidad de republicación de sitios retenida y representaciones de contenido de API.
- Mantener dieciséis herramientas, todos los valores predeterminados de entrada y el comportamiento HTTP sin cambios. Este parche de paquete de metadatos está versionado de forma independiente del contrato de API de backend 1.107.2.
1.9.2 -- 2026-10-06
- Las dependencias se declaran como versiones exactas, por lo que un servidor instalado usa las mismas versiones de SDK y
zodcon las que se construyó y probó. Sin cambio funcional.
1.9.1 -- 2026-10-06
- Mantenimiento de dependencias: se actualizaron las versiones de dependencias bloqueadas utilizadas para construir y probar el servidor. Sin cambio funcional.
1.9.0 -- 2026-10-06
publish_htmlyupdate_htmlimprimendeliveryModeReasony una líneaDelivery notice:cuando el servidor los devuelve. Sin cambios de entrada.
1.8.0 -- 2026-10-05
- Agregar
update_hostingy la entrada opcionaldeliveryModeen herramientas de publicación; las respuestas muestran los metadatos de alojamiento del servidor. Recuento de herramientas: 15 -> 16.
1.7.0 -- 2026-06-08
- Agregar
republish_site-- reemplaza los archivos de un sitio publicado en la misma URL. Recuento de herramientas: 14 -> 15.
1.6.0 -- 2026-06-05
- Publicación privada por defecto. Cuando
namespacese omite, las cinco herramientas de publicación (publish_html,publish_file,publish_site,publish_json,publish_kv) ahora envían un espacio de nombres no listado explícito (priv-<random>) en lugar de dejar que el backend usepublicpor defecto. Espacio de nombres omitido = no listado (accesible solo por su enlace, no listado en galería, no indexado en búsqueda); pasanamespace: "public"explícitamente para listar + indexar. Sin ruptura:namespacesigue siendo opcional. - Las respuestas de publicación para espacios de nombres no públicos ahora agregan un aviso de "Enlace no listado" que explica cómo hacer público el contenido.
- Descripciones de herramientas y README reescritos para reflejar el modelo privado por defecto.
1.5.0 -- 2026-05-21
- Agregar 8 nuevas herramientas MCP:
update_html,publish_json,get_json,update_json,publish_kv,set_kv,get_kv,search_gallery. - Recuento de herramientas: 6 -> 14. Cobertura completa de actualización de HTML, CRUD de JSON, CRUD de KV y descubrimiento de galería (incl. listado con ámbito de propietario mediante
mine=true). - Las operaciones de actualización (
update_html,update_json,set_kv) requieren elownerTokenoriginal;password(cuando se establece) se reenvía comoX-Password.
1.4.0 -- 2026-05-12
- Sincronizar con la especificación 1.31.0 -- agrega variantes sin procesar
text/*yapplication/octet-streamenPOST /api/html; espejo PUT; 422 consupportedTypes.