brewpage-mcp 1.16.5 → 1.16.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@ Choosing a host? See how BrewPage compares with GitHub Pages, Netlify Drop, Tiin
17
17
  ## Quick Start
18
18
 
19
19
  ```bash
20
- npx -y brewpage-mcp@1.16.5
20
+ npx -y brewpage-mcp@1.16.6
21
21
  ```
22
22
 
23
23
  Requires Node.js 20 or newer. This starts the stdio server for an MCP client.
@@ -50,7 +50,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
50
50
  "mcpServers": {
51
51
  "brewpage": {
52
52
  "command": "npx",
53
- "args": ["-y", "brewpage-mcp@1.16.5"]
53
+ "args": ["-y", "brewpage-mcp@1.16.6"]
54
54
  }
55
55
  }
56
56
  }
@@ -61,7 +61,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
61
61
  Register a project-scoped stdio server:
62
62
 
63
63
  ```bash
64
- claude mcp add --transport stdio --scope project brewpage -- npx -y brewpage-mcp@1.16.5
64
+ claude mcp add --transport stdio --scope project brewpage -- npx -y brewpage-mcp@1.16.6
65
65
  ```
66
66
 
67
67
  This writes `.mcp.json` in the project root. Use `--scope user` for user-scoped registration. See the [official Claude Code MCP guide](https://code.claude.com/docs/en/mcp).
@@ -75,7 +75,7 @@ Open **Settings > MCP** and add:
75
75
  "mcpServers": {
76
76
  "brewpage": {
77
77
  "command": "npx",
78
- "args": ["-y", "brewpage-mcp@1.16.5"]
78
+ "args": ["-y", "brewpage-mcp@1.16.6"]
79
79
  }
80
80
  }
81
81
  }
@@ -89,7 +89,7 @@ Open the Cline MCP settings panel and add:
89
89
  {
90
90
  "brewpage": {
91
91
  "command": "npx",
92
- "args": ["-y", "brewpage-mcp@1.16.5"]
92
+ "args": ["-y", "brewpage-mcp@1.16.6"]
93
93
  }
94
94
  }
95
95
  ```
@@ -97,7 +97,7 @@ Open the Cline MCP settings panel and add:
97
97
  ### Global Install
98
98
 
99
99
  ```bash
100
- npm install -g brewpage-mcp@1.16.5
100
+ npm install -g brewpage-mcp@1.16.6
101
101
  brewpage-mcp
102
102
  ```
103
103
 
@@ -530,6 +530,10 @@ Every publish response includes an **owner token** -- the only credential that a
530
530
 
531
531
  ## Changelog
532
532
 
533
+ ## 1.16.6 -- 2026-10-31
534
+
535
+ - `publish_html`, `publish_file` and `publish_site` descriptions lead with `namespace=public` to be found (gallery + Google, Bing & AI search; omitted: private); the `namespace` input names what to publish publicly (docs, guides, demos, portfolios, reports, landing pages) and the generated `priv-*` default; the private result line says how to be found. Shorter texts, no new facts.
536
+
533
537
  ## 1.16.5 -- 2026-10-30
534
538
 
535
539
  - `update_html` takes optional `tags` (sent as `?tags=a,b`); `update_html` and `republish_site` tags replace the stored tags, `[]` clears them, omitted keeps them. A 429 on any write prints the server's `Retry-After` beside the verbatim body (`retryAfterSeconds`).
package/dist/tools.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { McpServer } from "@modelcontextprotocol/server";
2
2
  export declare const DEFAULT_BASE_URL = "https://brewpage.app";
3
- export declare const USER_AGENT = "brewpage-mcp/1.16.5";
3
+ export declare const USER_AGENT = "brewpage-mcp/1.16.6";
4
4
  export declare const OWNER_TOKEN_ENV = "BREWPAGE_OWNER_TOKEN";
5
5
  export interface ServerOptions {
6
6
  /** BrewPage origin for API calls; default https://brewpage.app. */
package/dist/tools.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/server";
2
2
  import { z } from "zod";
3
3
  export const DEFAULT_BASE_URL = "https://brewpage.app";
4
- export const USER_AGENT = "brewpage-mcp/1.16.5";
4
+ export const USER_AGENT = "brewpage-mcp/1.16.6";
5
5
  export const OWNER_TOKEN_ENV = "BREWPAGE_OWNER_TOKEN";
6
6
  const READ_ONLY = { readOnlyHint: true };
7
7
  const DESTRUCTIVE = { readOnlyHint: false, destructiveHint: true };
@@ -99,17 +99,19 @@ function resolveNamespace(namespace) {
99
99
  return namespace && namespace.length > 0 ? namespace : defaultPrivateNamespace();
100
100
  }
101
101
  const UNLISTED_NOTICE = "Private: not listed. Anyone with the link can open it.";
102
- const LISTABLE_HINT = " Use namespace public to list it in the gallery and sitemap.";
102
+ const LISTABLE_HINT = " To be found, send namespace=public: gallery + Google, Bing & AI search.";
103
103
  const PROTECTED_UNLISTED_NOTICE = "Password: link + password. Not listed.";
104
- const PUBLIC_NAMESPACE_LEAD = "namespace=public: listed in the public gallery and the sitemap, so Google, Bing and AI search can find and index it " +
105
- "and people can discover it. Suits anything meant to be found or shared: docs, guides, demos, portfolios, reports, landing pages. ";
104
+ const PUBLIC_NAMESPACE_LEAD = "Send namespace=public for anything meant to be found or shared (docs, guides, demos, portfolios, reports, landing pages): " +
105
+ "listed in the public gallery and sitemap, so Google, Bing and AI search index it and people discover it. ";
106
106
  const PUBLIC_NAMESPACE_TAIL = " Anyone can find and read a public page, so it is unsuitable for secrets, tokens or personal data. " +
107
- "Omit (default): private. Unlisted and not indexed; anyone who has the link can still open it. ";
107
+ "Omit (default): private, a generated priv-* namespace; unlisted, not indexed; the link still opens it. ";
108
+ /** Tool-description lead for listable publish tools. */
109
+ const PUBLIC_HINT = "Send namespace=public to be found: gallery + Google, Bing & AI search. Omitted: private. ";
108
110
  const NAMESPACE_FORMAT = "Lowercase only: 1-32 of a-z, 0-9, hyphen.";
109
111
  /** `namespace` for publish_html and publish_file. */
110
112
  const NAMESPACE_DESCRIPTION = PUBLIC_NAMESPACE_LEAD +
111
- "Public pages are served right on the brewpage.app domain, which gives them the strongest reach in search; " +
112
- "a page whose code needs its own origin (cookies, storage) gets its own subdomain automatically." +
113
+ "Public pages are served on the brewpage.app domain itself, for the strongest search reach; " +
114
+ "code that needs its own origin (cookies, storage) gets its own subdomain automatically." +
113
115
  PUBLIC_NAMESPACE_TAIL + NAMESPACE_FORMAT;
114
116
  const SITE_NAMESPACE_DESCRIPTION = PUBLIC_NAMESPACE_LEAD + "A site always gets its own subdomain." +
115
117
  PUBLIC_NAMESPACE_TAIL + NAMESPACE_FORMAT;
@@ -123,9 +125,9 @@ const DELIVERY_MODE_SCHEMA = z.enum(["path", "subdomain"]).optional().describe("
123
125
  "Everything else in any namespace (Markdown, code/text, files, JSON, KV, public HTML) defaults to path (Promotion); public HTML may automatically choose subdomain for browser features. " +
124
126
  "When creation returns an existing publication, it keeps its actual mode and URL.");
125
127
  /** Site upload rules shared by publish_site and republish_site; current values come from get_limits. */
126
- const SITE_LIMITS_TEXT = "Default limits (current values: GET /api/limits): a request is at most 25 MiB; a site at most 200 files, 5 MiB per file and 20 MiB in total; " +
127
- "each path at most 380 characters. System files (.DS_Store, __MACOSX/ and similar) are skipped and never count; files with an unsupported extension " +
128
- "or a too-long path are skipped and listed in notices. Entry: `entry`, else root index.html, else the shallowest HTML file. " +
128
+ const SITE_LIMITS_TEXT = "Default limits (current: GET /api/limits): request 25 MiB; site 200 files, 5 MiB per file, 20 MiB total; " +
129
+ "path 380 characters. System files (.DS_Store, __MACOSX/ and similar) are skipped and never count; files with an unsupported extension " +
130
+ "or too-long path are skipped and listed in notices. Entry: `entry`, else root index.html, else the shallowest HTML file. " +
129
131
  "Errors: 400 = a site limit exceeded (the message names it), invalid path, no HTML file, or a PDF/Office file unreadable " +
130
132
  "or password-protected; 413 = request over 25 MiB, too many files and form fields, or a file name/path too long; " +
131
133
  "422 = no servable file left; 503 = busy, retry after Retry-After seconds.";
@@ -216,7 +218,7 @@ export function createServer(options = {}) {
216
218
  const apiFetch = options.fetch ?? fetch;
217
219
  const server = new McpServer({
218
220
  name: "brewpage-mcp",
219
- version: "1.16.5",
221
+ version: "1.16.6",
220
222
  });
221
223
  /** Caller argument first, then the configured default; `fromEnv` marks the configured one. */
222
224
  function ownerTokenFor(argument) {
@@ -291,9 +293,10 @@ export function createServer(options = {}) {
291
293
  }
292
294
  server.registerTool("publish_html", {
293
295
  ...toolMeta("Publish HTML, Markdown, code or JSON page", ADDITIVE),
294
- description: "Publish HTML, Markdown, code or JSON content to BrewPage (max 5 MiB); format omitted -> the server detects it. Returns its primary share link and owner token. Supports password protection, custom TTL, optional filename, and an opt-in top toolbar (showTopBar). " +
295
- "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; " +
296
- "the result then includes deliveryModeReason and a delivery notice. Markdown raw HTML is allowlisted: scripts, styles, event handlers, forms and embeds are removed. " +
296
+ description: "Publish HTML, Markdown, code or JSON to BrewPage (max 5 MiB). " + PUBLIC_HINT +
297
+ "Format omitted -> server detects it. Returns its primary share link and owner token. Optional password, TTL, filename, top toolbar (showTopBar). " +
298
+ "A `public` page without deliveryMode may get its own subdomain if it needs browser features a BrewPage link lacks; " +
299
+ "the result then has deliveryModeReason and a delivery notice. Markdown raw HTML is allowlisted: scripts, styles, event handlers, forms, embeds removed. " +
297
300
  MANAGE_URL_TEXT + " " + SECRETS,
298
301
  inputSchema: {
299
302
  content: z.string().describe("HTML, Markdown, code or JSON to publish"),
@@ -362,7 +365,7 @@ export function createServer(options = {}) {
362
365
  });
363
366
  server.registerTool("publish_file", {
364
367
  ...toolMeta("Publish file from URL", ADDITIVE),
365
- description: "Upload a file to BrewPage via URL. Max 5 MiB, video 20 MiB. Returns its primary share link and owner token. Does not expose password or TTL inputs. " +
368
+ description: "Upload a file from a URL. " + PUBLIC_HINT + "Max 5 MiB, video 20 MiB; no password or TTL. Returns its primary share link and owner token. " +
366
369
  MANAGE_URL_TEXT + " " + SECRETS,
367
370
  inputSchema: {
368
371
  url: z.string().url().describe("URL of the file to upload"),
@@ -545,8 +548,8 @@ export function createServer(options = {}) {
545
548
  });
546
549
  server.registerTool("publish_site", {
547
550
  ...toolMeta("Publish site", ADDITIVE),
548
- description: "Publish an HTML site to BrewPage. Single-page: `entryContent`. Multi-page: `files` (array of `{path, content}`). Optional `entry` overrides default `index.html`. Returns its primary share link and owner token. " +
549
- "Static sites: HTML, CSS and JS (incl. built React/Vue/TypeScript bundles) run in the browser; PHP and other server code never run. " + SITE_LIMITS_TEXT +
551
+ description: "Publish an HTML site to BrewPage. " + PUBLIC_HINT + "Single-page: `entryContent`. Multi-page: `files` (`{path, content}` array). Optional `entry` overrides `index.html`. Returns its primary share link and owner token. " +
552
+ "Static only: HTML, CSS, JS (incl. built React/Vue bundles) run in the browser; server code (PHP etc.) never runs. " + SITE_LIMITS_TEXT +
550
553
  " " + MANAGE_URL_TEXT + " " + SECRETS,
551
554
  inputSchema: {
552
555
  deliveryMode: DELIVERY_MODE_SCHEMA,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brewpage-mcp",
3
- "version": "1.16.5",
3
+ "version": "1.16.6",
4
4
  "mcpName": "io.github.kochetkov-ma/brewpage-mcp",
5
5
  "description": "MCP server for BrewPage — publish and manage HTML, sites, KV, JSON and files from AI assistants",
6
6
  "type": "module",