io.github.kochetkov-ma/brewpage-mcp
io.github.kochetkov-ma/brewpage-mcpkochetkov-mastreamable-httpv1.14.2Scanned
Publish HTML, Markdown, sites, KV, JSON and files on BrewPage; keep the returned owner token.
20 tools: 5 can delete or cancel things, 5 do something that can't be undone, 4 change things and 6 only read.
- Reads private data · 3
- Reads text others write · 1
- Can send data out · 5
- No findings
Anlyon alternative
14 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
20 tools
Deletes or cancels 5Claude Code: deny
delete_resourceDelete a BrewPage resource (HTML page, site, KV store, JSON document, or file) using the owner token.No findings
Why it is in this group
- The name "delete_resource" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a BrewPage resource (HTML page, site, KV store, JSON document, or file) using the owner token.
Annotations the server declares
- title: Delete publication
- readOnlyHint: false
- destructiveHint: true
republish_siteRepublish (full-replace) an existing multi-file BrewPage site in place at the SAME URL/ID.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Republish (full-replace) an existing multi-file BrewPage site in place at the SAME URL/ID. Requires owner token. The uploaded bundle becomes the complete new file set — files absent from it are removed, new files added, matching files overwritten. Single-page: pass `entryContent`. Multi-page: pass `files` (array of `{path, content}`). Optional `entry` overrides the default `index.html`. Republishing preserves existing expiry. Old publications (made before 5 October 2026) are read-only: 409 OLD_PUBLICATION_READ_ONLY. Limits (call get_limits for current values): a request is at most 25 MB; a site at most 200 files, 5 MB per file and 20 MB in total; each path at most 380 characters. System files (.DS_Store, __MACOSX/ and similar) are skipped and never count; files with an unsupported extension or a too-long path are skipped and listed in notices. Entry: `entry`, else root index.html, else the shallowest HTML file. Errors: 400 = a site limit exceeded (the message names it and what to do), invalid path or no HTML file; 413 = request over 25 MB, too many files and form fields, or a file name/path too long; 422 = no servable file left.
Annotations the server declares
- title: Republish site
- readOnlyHint: false
- destructiveHint: true
set_kvSet or update a key in an existing BrewPage KV store.No findings
Why it is in this group
- The name "set_kv" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set or update a key in an existing BrewPage KV store. Requires owner token. The key name `hosting` is reserved. Old publications (made before 5 October 2026) are read-only: 409 OLD_PUBLICATION_READ_ONLY.
Annotations the server declares
- title: Set KV value
- readOnlyHint: false
- destructiveHint: true
update_htmlUpdate an existing BrewPage HTML/Markdown page.No findings
Why it is in this group
- The name "update_html" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update an existing BrewPage HTML/Markdown page. Requires owner token. Returns the updated page metadata. The link and delivery mode never change on update; an advisory deliveryModeReason and delivery notice are included when the new content uses browser features that may not work fully on a BrewPage link. Old publications (made before 5 October 2026) are read-only: 409 OLD_PUBLICATION_READ_ONLY.
Annotations the server declares
- title: Update page
- readOnlyHint: false
- destructiveHint: true
update_jsonUpdate an existing BrewPage JSON document.No findings
Why it is in this group
- The name "update_json" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update an existing BrewPage JSON document. Requires owner token. Accepts a JSON object, array, or a JSON-encoded string. Old publications (made before 5 October 2026) are read-only: 409 OLD_PUBLICATION_READ_ONLY.
Annotations the server declares
- title: Update JSON document
- readOnlyHint: false
- destructiveHint: true
Can't be undone 5Claude Code: ask
publish_fileUpload a file to BrewPage via URL.Can send data outNo findings
Why it is in this group
- The name "publish_file" says "publish": a word for a change that another call does not undo.
What it can reach
- outboundThe name "publish_file" says "publish": it sends or publishes something to other people.
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Upload a file to BrewPage via URL. Repository defaults: 5 MiB for files/audio, 20 MiB for video. Returns its primary share link and owner token. Does not expose password or TTL inputs. Returns manageUrl (private): give it to the user privately; never publish it. Secrets allowed; likely ones are flagged in notices. For a secret: private namespace + password.
Annotations the server declares
- title: Publish file from URL
- readOnlyHint: false
- destructiveHint: false
publish_htmlPublish HTML or Markdown content to BrewPage (repository default limit 5 MiB).Can send data outNo findings
Why it is in this group
- The name "publish_html" says "publish": a word for a change that another call does not undo.
What it can reach
- outboundThe name "publish_html" says "publish": it sends or publishes something to other people.
Description, as the server wrote it Publish HTML or Markdown content to BrewPage (repository default limit 5 MiB). Returns its primary share link and owner token. Supports password protection, custom TTL, optional filename, and an opt-in top toolbar (showTopBar). When deliveryMode is omitted for a `public` page, the server may publish it on its own subdomain if the page needs browser features a BrewPage link does not provide; the result then includes deliveryModeReason and a delivery notice. Markdown raw HTML is allowlisted: scripts, styles, event handlers, forms and embeds are removed. Always share the returned URL. Returns manageUrl (private): give it to the user privately; never publish it. Secrets allowed; likely ones are flagged in notices. For a secret: private namespace + password.
Annotations the server declares
- title: Publish HTML or Markdown page
- readOnlyHint: false
- destructiveHint: false
publish_jsonPublish a JSON document to BrewPage (repository default limit 1 MiB).Can send data outNo findings
Why it is in this group
- The name "publish_json" says "publish": a word for a change that another call does not undo.
What it can reach
- outboundThe name "publish_json" says "publish": it sends or publishes something to other people.
Description, as the server wrote it Publish a JSON document to BrewPage (repository default limit 1 MiB). Accepts a JSON object, array, or a JSON-encoded string containing any valid JSON, including scalars/null. Returns its primary share link and owner token. Returns manageUrl (private): give it to the user privately; never publish it. Secrets allowed; likely ones are flagged in notices. For a secret: private namespace + password.
Annotations the server declares
- title: Publish JSON document
- readOnlyHint: false
- destructiveHint: false
publish_kvPublish a key/value entry to BrewPage.Can send data outNo findings
Why it is in this group
- The name "publish_kv" says "publish": a word for a change that another call does not undo.
What it can reach
- outboundThe name "publish_kv" says "publish": it sends or publishes something to other people.
Description, as the server wrote it Publish a key/value entry to BrewPage. Creates a KV store; the entry is addressed by (namespace, id, key). Repository defaults: 1 MiB per value, 1,000 keys per store; the key name `hosting` is reserved. Returns its primary share link and owner token. Returns manageUrl (private): give it to the user privately; never publish it. Secrets allowed; likely ones are flagged in notices. For a secret: private namespace + password.
Annotations the server declares
- title: Publish KV entry
- readOnlyHint: false
- destructiveHint: false
publish_sitePublish an HTML site to BrewPage.Can send data outNo findings
Why it is in this group
- The name "publish_site" says "publish": a word for a change that another call does not undo.
What it can reach
- outboundThe name "publish_site" says "publish": it sends or publishes something to other people.
Description, as the server wrote it Publish an HTML site to BrewPage. Single-page: pass `entryContent`. Multi-page: pass `files` (array of `{path, content}`). Optional `entry` overrides default `index.html`. Use its returned primary link and retain the owner token. Limits (call get_limits for current values): a request is at most 25 MB; a site at most 200 files, 5 MB per file and 20 MB in total; each path at most 380 characters. System files (.DS_Store, __MACOSX/ and similar) are skipped and never count; files with an unsupported extension or a too-long path are skipped and listed in notices. Entry: `entry`, else root index.html, else the shallowest HTML file. Errors: 400 = a site limit exceeded (the message names it and what to do), invalid path or no HTML file; 413 = request over 25 MB, too many files and form fields, or a file name/path too long; 422 = no servable file left. Returns manageUrl (private): give it to the user privately; never publish it. Secrets allowed; likely ones are flagged in notices. For a secret: private namespace + password.
Annotations the server declares
- title: Publish site
- readOnlyHint: false
- destructiveHint: false
Changes things 4Claude Code: ask
bind_tokenAdd an owner token to your BrewPage profile (as publish).No findings
Why it is in this group
- The description's first verb is "add": a word for a change.
Description, as the server wrote it Add an owner token to your BrewPage profile (as publish). Needs an admin token of that profile.
Annotations the server declares
- title: Add token to profile
- readOnlyHint: false
- destructiveHint: false
mint_tokenMint a new profile token with an admin token; the new token is shown once.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Mint a new profile token with an admin token; the new token is shown once. Scope publish (default) or admin; expiry 30d, 90d, 1y or never.
Annotations the server declares
- title: Mint profile token
- readOnlyHint: false
- destructiveHint: false
set_visibilityHide or show a public publication in the gallery and sitemap.No findings
Why it is in this group
- The name "set_visibility" says "set": a word for a change.
Description, as the server wrote it Hide or show a public publication in the gallery and sitemap. Link unchanged.
Annotations the server declares
- title: Set gallery visibility
- readOnlyHint: false
- destructiveHint: false
update_hostingChange delivery mode for a NEW publication (not a site, not a non-public HTML-format page).No findings
Why it is in this group
- The name "update_hosting" says "update": a word for a change.
Description, as the server wrote it Change delivery mode for a NEW publication (not a site, not a non-public HTML-format page). Requires owner token; pass the current hostingVersion when known. Mismatches are reported, not rejected: a stale version still applies, and OLD links or forced subdomain modes stay unchanged; the result then carries a delivery notice. Content updates never change hosting.
Annotations the server declares
- title: Change delivery mode
- readOnlyHint: false
- destructiveHint: false
Only reads 6Show 6 read-only tools
get_jsonFetch a published BrewPage JSON document by namespace and ID.Reads private dataNo findings
Why it is in this group
- The name "get_json" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "fetch" and "document": it reads documents.
Description, as the server wrote it Fetch a published BrewPage JSON document by namespace and ID.
Annotations the server declares
- title: Read JSON document
- readOnlyHint: true
get_kvFetch a value from a BrewPage KV store by namespace, ID, and key.No findings
Why it is in this group
- The name "get_kv" says "get": a word for reading.
Description, as the server wrote it Fetch a value from a BrewPage KV store by namespace, ID, and key.
Annotations the server declares
- title: Read KV value
- readOnlyHint: true
get_limitsGet the current BrewPage upload limits (GET /api/limits): request size, site file count, per-file and total size, ZIP expansion, path and name lengths, TTL default/maximum, allowed…Reads private dataNo findings
Why it is in this group
- The name "get_limits" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "file": it reads files.
Description, as the server wrote it Get the current BrewPage upload limits (GET /api/limits): request size, site file count, per-file and total size, ZIP expansion, path and name lengths, TTL default/maximum, allowed file extensions and skipped system files. Sizes are bytes. With BREWPAGE_OWNER_TOKEN set: also reach (token|profile) and ownerMaxTtlDays. Call it before publishing a large or multi-file site.
Annotations the server declares
- title: Get upload limits
- readOnlyHint: true
get_pageFetch stored rendered HTML or format-specific code/text by namespace and ID.Reads text others writeNo findings
Why it is in this group
- The name "get_page" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "fetch" and "html": it reads web pages, which anyone can write.
Description, as the server wrote it Fetch stored rendered HTML or format-specific code/text by namespace and ID. This reads API content, not the owner-only original-source endpoint or browser viewer. Protected reads use the password header.
Annotations the server declares
- title: Read page
- readOnlyHint: true
get_statsGet BrewPage platform-wide usage statistics including page count, file count, and storage usage.Reads private dataNo findings
Why it is in this group
- The name "get_stats" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "file": it reads files.
Description, as the server wrote it Get BrewPage platform-wide usage statistics including page count, file count, and storage usage. Counts use disjoint split: alive_public + alive_private + deleted == total. Optional `tz` shifts the 'today' boundary to the given IANA zone (default UTC).
Annotations the server declares
- title: Get platform statistics
- readOnlyHint: true
search_gallerySearch the BrewPage public gallery.No findings
Why it is in this group
- The name "search_gallery" says "search": a word for reading.
Description, as the server wrote it Search the BrewPage public gallery. Optional filters: text query, pagination, sort, and 'mine' (owner-scoped, requires owner token).
Annotations the server declares
- title: Search public gallery
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
15 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 untrusted-input tool breaks every one.
- Reads private data3
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out5
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__brewpage__get_page"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.14.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http brewpage https://brewpage.app/mcpclaude mcp add --transport http brewpage https://brewpage.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__brewpage__get_page",
"mcp__brewpage__get_stats",
"mcp__brewpage__get_json",
"mcp__brewpage__get_kv",
"mcp__brewpage__get_limits",
"mcp__brewpage__search_gallery"
],
"ask": [
"mcp__brewpage__publish_html",
"mcp__brewpage__publish_file",
"mcp__brewpage__update_hosting",
"mcp__brewpage__publish_site",
"mcp__brewpage__publish_json",
"mcp__brewpage__publish_kv",
"mcp__brewpage__set_visibility",
"mcp__brewpage__bind_token",
"mcp__brewpage__mint_token"
],
"deny": [
"mcp__brewpage__delete_resource",
"mcp__brewpage__republish_site",
"mcp__brewpage__update_html",
"mcp__brewpage__update_json",
"mcp__brewpage__set_kv"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as brewpage. Review it before you use it.
Capability tags behind 9 rules
- mcp__brewpage__publish_html outbound
- mcp__brewpage__publish_file outbound
- mcp__brewpage__get_page untrusted-input
- mcp__brewpage__get_stats private-data
- mcp__brewpage__publish_site outbound
- mcp__brewpage__publish_json outbound
- mcp__brewpage__get_json private-data
- mcp__brewpage__publish_kv outbound
- mcp__brewpage__get_limits private-data
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.github.kochetkov-ma/brewpage-mcp/verify?hash=f4199845296966931ba5edbf2747af70a1982a29ad6440153004bda2f4e9d629" | jq -e '.changed == false'Pinned hash f41998452969, from Oct 26, 2026, 11:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.github.kochetkov-ma/brewpage-mcp/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.github.kochetkov-ma/brewpage-mcp)Source: MCP Registry · repository. Synced Oct 26, 2026, 11:17 UTC.