brewpage-mcp

Publica HTML, Markdown, KV, JSON y archivos en brewpage.app desde asistentes de IA.

Documentación

brewpage-mcp

npm version License: MIT

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.

HerramientaPropósito
publish_htmlPublicar HTML o Markdown
update_htmlReemplazar el contenido de la página; el formato omitido conserva el formato almacenado
get_pageObtener el contenido bruto de la página
publish_fileObtener una URL de origen y subir el archivo
publish_sitePublicar una sola página o un paquete completo de sitio de múltiples archivos
republish_siteReemplazar el paquete completo del sitio en el mismo ID/enlace
publish_jsonPublicar un objeto JSON, un array o una cadena codificada en JSON
get_jsonLeer un documento JSON
update_jsonReemplazar un documento JSON
publish_kvCrear un almacén KV con una entrada inicial
set_kvEstablecer o reemplazar una clave en un almacén KV propiedad del usuario
get_kvLeer un valor KV
update_hostingCambiar el modo de entrega elegible con token de propietario y versión de hosting
delete_resourceEliminar contenido HTML, JSON, KV o archivos
search_galleryExplorar contenido público o listar recursos propios
get_statsLeer 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 LLMHerramientaNotas
"Publica este HTML para poder compartirlo"publish_htmlformat=HTML; guarda ownerToken
"Comparte estas notas de reunión como un enlace"publish_htmlformat=MARKDOWN; salida renderizada legible
"Aloja este artefacto generado por IA"publish_htmlnamespace opcional; privado/no listado por defecto; public otorga elegibilidad para galería/búsqueda excepto cuando está protegido
"Sube esta imagen / PDF / video"publish_fileSe obtiene desde URL; vista previa en línea en URL corta
"Despliega este sitio estático"publish_sitePasa el arreglo files o entryContent
"Reemplaza el sitio que publiqué"republish_siteToken de propietario; el paquete completo reemplaza todos los archivos existentes
"Dale a mi página pública una dirección dedicada"update_hostingNUEVO 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_htmlRequiere ownerToken; la URL permanece igual
"Elimina la página que publiqué"delete_resourceRequiere ownerToken de la creación
"Lee de nuevo la página que publiqué"get_pageDevuelve contenido sin procesar para edición
"¿Cuántas páginas hay en BrewPage?"get_statsDevuelve totales de la plataforma
"Almacena el estado JSON entre turnos"publish_jsonDevuelve URL corta + token de propietario
"Lee ese documento JSON de nuevo"get_jsonPor namespace + id
"Actualiza el JSON que almacené"update_jsonRequiere ownerToken; conserva la URL
"Guarda un valor bajo una etiqueta / clave"publish_kvCrea una nueva ranura KV
"Cambia el valor KV que almacené"set_kvRequiere ownerToken
"¿Qué almacené bajo esa clave?"get_kvPor namespace + id + key
"Lista mis páginas publicadas" / "¿Qué publiqué?"search_galleryEstablece mine=true + ownerToken
"Explora la galería pública de BrewPage"search_galleryOpcional 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_json o publish_kv para agrupar nuevos recursos bajo un propietario; las creaciones REST aceptan X-Owner-Token.
  • Pásalo a delete_resource para eliminar contenido.
  • Pásalo a search_gallery con mine=true para listar recursos propiedad del propietario. get_page no tiene entrada de token de propietario; las lecturas protegidas usan password.

Configuración

VariablePredeterminadoDescripción
BREWPAGE_URLhttps://brewpage.appURL base de API autorizada; nunca un host de publicación

Enlaces

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 zod con 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_html y update_html imprimen deliveryModeReason y una línea Delivery notice: cuando el servidor los devuelve. Sin cambios de entrada.

1.8.0 -- 2026-10-05

  • Agregar update_hosting y la entrada opcional deliveryMode en 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 namespace se 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 use public por defecto. Espacio de nombres omitido = no listado (accesible solo por su enlace, no listado en galería, no indexado en búsqueda); pasa namespace: "public" explícitamente para listar + indexar. Sin ruptura: namespace sigue 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 el ownerToken original; password (cuando se establece) se reenvía como X-Password.

1.4.0 -- 2026-05-12

  • Sincronizar con la especificación 1.31.0 -- agrega variantes sin procesar text/* y application/octet-stream en POST /api/html; espejo PUT; 422 con supportedTypes.

Licencia

MIT