Publish HTML, Markdown, KV, JSON, and files to brewpage.app from AI assistants. No signup.
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y brewpage-mcp
MCP client config
{
"mcpServers": {
"brewpage-mcp": {
"command": "npx",
"args": [
"-y",
"brewpage-mcp"
]
}
}
}This repository is the open-source public layer of BrewPage -- a proprietary HTML/KV/JSON/file hosting platform. The backend, frontend, and infrastructure remain closed-source.
Docs: https://kochetkov-ma.github.io/brewpage-openapi/ | API Reference: https://kochetkov-ma.github.io/brewpage-openapi/api-reference/
BrewPage is a free instant hosting service for HTML pages, Markdown documents,
multi-file sites, AI artifacts, JSON documents, key-value stores, and binary files.
No signup or API key required for creation. Use the exact returned primary HTTPS link; publications may use a BrewPage path or their own content host.
Key characteristics:
?ns= selects public; MCP omitted namespace generates an unlisted namespace. Public unpassworded content may qualify for gallery discovery; search eligibility additionally depends on delivery. Custom namespaces are unlisted, readable by anyone with the link unless password-protected. Unlisted, protected or otherwise ineligible native responses carry noindex; eligible public HTML, sites and files may permit indexing.ownerToken. Use it to update content in place (stable URL), delete it, or list your own resources. No accounts, no sessions.ttl query parameter. Owner-specific caps and eligible automatic extensions can affect expiry; use returned expiresAt.X-Password; owner updates, deletion and scoped lists use X-Owner-Token. Rate limits depend on operation/visibility; handle 429 and Retry-After.Both brewpage.app and brewdata.app serve the same API.
AI agents frequently need to share structured outputs -- reports, artifacts, generated HTML, intermediate JSON state -- with users or downstream systems via a stable URL. BrewPage provides that as a zero-setup REST API: one POST call, one URL back. No OAuth, no S3 bucket configuration, no infrastructure. The MCP server (brewpage-mcp) wraps the API into sixteen typed tools that any MCP-compatible agent (Claude, Codex, Gemini, Cursor) can call directly.
Publish an HTML page and get a shareable link:
curl -X POST 'https://brewpage.app/api/html?ns=public&format=html&ttl=15' \
-H "Content-Type: application/json" \
-H "User-Agent: MyAgent/1.0" \
-d '{"content": "<h1>Hello, world!</h1>"}'
Response:
{
"id": "aBcDeFgHiJ",
"namespace": "public",
"link": "https://brewpage.app/public/aBcDeFgHiJ",
"ownerLink": "https://brewpage.app/api/html/public/aBcDeFgHiJ",
"ownerToken": "your-secret-token",
"expiresAt": "2026-06-04T02:00:00Z",
"sizeBytes": 22
}
Open link in any browser -- no further steps required.
| Scenario | API call |
|---|---|
| An AI agent generates a shareable HTML report and needs a stable URL to return to the user | POST /api/html -- returns link immediately |
| A GPT pipeline needs to persist JSON state between conversation turns without external storage | POST /api/json?ns=myproject then GET /api/json/myproject/{id} |
| A code-generation tool produces a downloadable file (PDF, archive, script) and needs to host it | POST /api/files -- file served with correct MIME type and inline preview |
| An agent publishes an artifact and later refines it without invalidating the shared URL | PUT /api/html/{ns}/{id} with X-Owner-Token -- content replaced, URL unchanged |
| A multi-step pipeline deploys a complete static site (HTML + CSS + JS) from a ZIP | POST /api/sites with archive=@site.zip -- all files served with relative links intact |
| Resource | Description | Limits |
|---|---|---|
| HTML pages | Raw HTML or Markdown with instant short URLs | 5 MB, TTL 1--30d |
| Key-value store | Named key-value pairs addressed by namespace/store ID | 1,000 keys/store |
| JSON documents | Store and retrieve arbitrary JSON with owner-scoped listing | 1 MiB, 10,000 docs/namespace |
| Files | Upload files with automatic MIME detection and inline preview | 5 MB (video 20 MB), 1,000 files/namespace |
| Sites | Multi-file HTML sites via ZIP or individual files | 20 MB total, 100 files, 5 MB/file, TTL 1--30d |
Creation returns a primary link and owner token. Keep the token for management and share the link exactly. Password protection excludes discovery; public namespace alone does not guarantee indexing. TTL and supported inputs vary by operation.
Publish Markdown:
curl -X POST "https://brewpage.app/api/html?format=markdown" \
-H "Content-Type: application/json" \
-H "User-Agent: MyAgent/1.0" \
-d '{"content": "# My Document\n\nHello **world**"}'
Store a JSON document:
curl -X POST https://brewpage.app/api/json \
-H "Content-Type: application/json" \
-H "User-Agent: MyAgent/1.0" \
-d '{"name": "config", "version": 1}'
Upload a site (ZIP archive):
curl -X POST "https://brewpage.app/api/sites" \
-H "User-Agent: MyAgent/1.0" \
-F "archive=@site.zip;type=application/zip"
Update content in place (stable URL):
curl -X PUT "https://brewpage.app/api/html/public/aBcDeFgHiJ" \
-H "Content-Type: application/json" \
-H "User-Agent: MyAgent/1.0" \
-H "X-Owner-Token: your-secret-token" \
-d '{"content": "<h1>Updated content</h1>"}'
Get platform stats:
curl https://brewpage.app/api/stats
openapi/openapi.yamlopenapi/openapi.jsonThe backend-generated public JSON contract owns schema authority. YAML is derived deterministically; Scalar serves an identical JSON copy. See openapi/openapi.provenance.json for export provenance. Correct backend generation before importing a new snapshot; do not author schemas in YAML.
| Tag | Description |
|---|---|
| HTML | Publish, retrieve, update, delete HTML/Markdown pages |
| KV | Key-value store CRUD (get, set, list, delete keys) |
| JSON | JSON document CRUD with owner-scoped listing |
| Files | File upload, download, list, delete |
| Sites | Multi-file site upload (ZIP or files), info, serve, delete |
| Gallery | Browse public content with search and pagination |
| Stats | Platform-wide usage statistics |
| Short Links | URL shortener for published content |
| SEO | Sitemap and robots.txt endpoints |
| Reports | Abuse reports for published content |
| Namespace | Collision-free namespace suggestions |
The brewpage-mcp package provides a Model Context Protocol server with 16 tools for AI-assisted content publishing and management. Selected tools appear below; see mcp-server/README.md for the complete list and documentation.
Package releases use .github/workflows/release.yml with package-scoped npm Trusted Publisher/OIDC for kochetkov-ma/brewpage-openapi, workflow release.yml, without an environment. CI needs no NPM_TOKEN, manual npm login or static-token rotation. Local npm whoami does not validate GitHub Actions OIDC authentication.
To retry publication from a local terminal, dispatch the current main workflow:
gh workflow run release.yml --repo kochetkov-ma/brewpage-openapi --ref main
Rerunning historical tag workflows that used token authentication is unsupported; use current main instead. The retry checks the matching version tag and unchanged MCP source, and skips publication when that version already exists.
| Tool | Description |
|---|---|
publish_html | Publish HTML or Markdown content with optional password, TTL, filename, and top toolbar |
publish_file | Upload a file from a URL |
publish_site | Publish a single-page or multi-file HTML site |
delete_resource | Delete any resource (HTML, KV, JSON, file) by owner token |
get_page | Fetch a published HTML page and its content |
get_stats | Get platform-wide usage statistics |
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"brewpage": {
"command": "npx",
"args": ["-y", "brewpage-mcp@1.9.3"]
}
}
}
Add to ~/.claude/settings.json:
{
"mcpServers": {
"brewpage": {
"command": "npx",
"args": ["-y", "brewpage-mcp@1.9.3"]
}
}
}
| Resource | URL |
|---|---|
| Live platform | https://brewpage.app |
| LLM context file | https://brewpage.app/llms.txt |
| Full LLM reference | https://brewpage.app/llms-full.txt |
| OpenAPI spec (YAML) | openapi/openapi.yaml |
| MCP server | mcp-server/ |
| npm package | https://www.npmjs.com/package/brewpage-mcp |
| Interactive API docs | https://kochetkov-ma.github.io/brewpage-openapi/ |
| Claude skill | https://github.com/kochetkov-ma/claude-brewcode/tree/main/skills/brewpage-publish |
| BrewCode plugin suite | https://github.com/kochetkov-ma/claude-brewcode |
| Wiki | https://github.com/kochetkov-ma/brewpage-openapi/wiki |
| Releases | https://github.com/kochetkov-ma/brewpage-openapi/releases |
BrewPage is described using schema.org/SoftwareApplication structured data on the platform homepage.
| Component | Description |
|---|---|
| OpenAPI 3.1 spec | Complete API contract for all public endpoints (YAML + JSON) |
| Interactive docs | Astro + Scalar documentation site (GitHub Pages) |
| MCP server | brewpage-mcp -- Claude Desktop/Code integration (16 tools) |
| Wiki | Code snippets, cheatsheet, tips & tricks |
| Release notes | Changelog for API and public tooling |
| Component | Description |
|---|---|
| Backend | Spring Boot + Kotlin REST API |
| Frontend | HTML/CSS/JS + Caddy reverse proxy |
| Infrastructure | VPS deployment, CI/CD pipelines |
| E2E test suite | Playwright + Testcontainers |
brewpage-openapi/
openapi/
openapi.json # OpenAPI 3.1 spec (JSON)
openapi.yaml # OpenAPI 3.1 spec (YAML)
docs/ # Astro documentation site
src/
pages/ # Documentation pages
components/ # Scalar API reference
mcp-server/ # MCP server (brewpage-mcp)
src/
index.ts # Server entry point
.github/
workflows/ # CI/CD (docs deploy, releases)
README.md
RELEASE-NOTES.md
LICENSE
Apache 2.0 covers this repository's contract/docs layer. The independently packaged MCP server uses MIT. The hosted backend, frontend and infrastructure remain proprietary. SDK/CLI module specifications are proposals; they do not establish released packages.