brewpage-mcp 1.16.0 → 1.16.1

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.0
20
+ npx -y brewpage-mcp@1.16.1
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.0"]
53
+ "args": ["-y", "brewpage-mcp@1.16.1"]
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.0
64
+ claude mcp add --transport stdio --scope project brewpage -- npx -y brewpage-mcp@1.16.1
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.0"]
78
+ "args": ["-y", "brewpage-mcp@1.16.1"]
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.0"]
92
+ "args": ["-y", "brewpage-mcp@1.16.1"]
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.0
100
+ npm install -g brewpage-mcp@1.16.1
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.1 -- 2026-10-30
534
+
535
+ - Update tools (`update_html`, `update_json`, `set_kv`, `republish_site`) state that tokens and manage links never go in public content.
536
+
533
537
  ## 1.16.0 -- 2026-10-29
534
538
 
535
539
  - `get_limits` accepts `ownerToken` (remote `/mcp` gets `reach`/`ownerMaxTtlDays`). Results open with `SECURITY ALERT (credential-published)` when public content holds a live BrewPage token or manage link. Wording: limits reach, local-only env token, MiB.
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.0";
3
+ export declare const USER_AGENT = "brewpage-mcp/1.16.1";
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.0";
4
+ export const USER_AGENT = "brewpage-mcp/1.16.1";
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 };
@@ -15,8 +15,10 @@ const ENV_DEFAULT = `env ${OWNER_TOKEN_ENV} (local server only)`;
15
15
  const NO_OWNER_TOKEN = `No owner token: pass ownerToken (local server: or set ${OWNER_TOKEN_ENV}).`;
16
16
  const CREATE_OWNER_TOKEN_DESCRIPTION = `Optional. Default: ${ENV_DEFAULT}, else a new token per create.`;
17
17
  const OWNER_TOKEN_DESCRIPTION = `Owner token from create. Default: ${ENV_DEFAULT}.`;
18
+ /** Backend guard checks create and update content alike. */
19
+ const NO_PUBLIC_CREDENTIALS = "BrewPage tokens and manage links must never be in public content.";
18
20
  const SECRETS = "Secrets allowed; likely ones are flagged in notices. Private namespace + password suit secrets. " +
19
- "BrewPage tokens and manage links must never be in public content.";
21
+ NO_PUBLIC_CREDENTIALS;
20
22
  const MANAGE_URL_TEXT = "Returns manageUrl, a private management link (grants control; not for public sharing).";
21
23
  const OLD_READ_ONLY_CODE = "OLD_PUBLICATION_READ_ONLY";
22
24
  const OLD_READ_ONLY_TEXT = ` Old publications (made before 5 October 2026) are read-only: 409 ${OLD_READ_ONLY_CODE} with createUrl to publish anew.`;
@@ -207,7 +209,7 @@ export function createServer(options = {}) {
207
209
  const apiFetch = options.fetch ?? fetch;
208
210
  const server = new McpServer({
209
211
  name: "brewpage-mcp",
210
- version: "1.16.0",
212
+ version: "1.16.1",
211
213
  });
212
214
  /** Caller argument first, then the configured default; `fromEnv` marks the configured one. */
213
215
  function ownerTokenFor(argument) {
@@ -646,7 +648,7 @@ export function createServer(options = {}) {
646
648
  });
647
649
  server.registerTool("republish_site", {
648
650
  ...toolMeta("Republish site", DESTRUCTIVE),
649
- description: "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: `entryContent`. Multi-page: `files` (array of `{path, content}`). Optional `entry` overrides the default `index.html`. Republishing preserves existing expiry." + OLD_READ_ONLY_TEXT + " " + SITE_LIMITS_TEXT,
651
+ description: "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: `entryContent`. Multi-page: `files` (array of `{path, content}`). Optional `entry` overrides the default `index.html`. Republishing preserves existing expiry." + OLD_READ_ONLY_TEXT + " " + SITE_LIMITS_TEXT + " " + NO_PUBLIC_CREDENTIALS,
650
652
  inputSchema: {
651
653
  namespace: z.string().describe("Site namespace"),
652
654
  id: z.string().describe("Site ID"),
@@ -738,7 +740,7 @@ export function createServer(options = {}) {
738
740
  server.registerTool("update_html", {
739
741
  ...toolMeta("Update page", DESTRUCTIVE),
740
742
  description: "Update an existing BrewPage HTML, Markdown, code or JSON page. Requires owner token. Returns the updated page metadata. " +
741
- "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_READ_ONLY_TEXT,
743
+ "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_READ_ONLY_TEXT + " " + NO_PUBLIC_CREDENTIALS,
742
744
  inputSchema: {
743
745
  namespace: z.string().describe("Page namespace"),
744
746
  id: z.string().describe("Page ID"),
@@ -872,7 +874,7 @@ export function createServer(options = {}) {
872
874
  });
873
875
  server.registerTool("update_json", {
874
876
  ...toolMeta("Update JSON document", DESTRUCTIVE),
875
- description: "Update an existing BrewPage JSON document. Requires owner token. Accepts a JSON object, array, or a JSON-encoded string." + OLD_READ_ONLY_TEXT,
877
+ description: "Update an existing BrewPage JSON document. Requires owner token. Accepts a JSON object, array, or a JSON-encoded string." + OLD_READ_ONLY_TEXT + " " + NO_PUBLIC_CREDENTIALS,
876
878
  inputSchema: {
877
879
  namespace: z.string().describe("Document namespace"),
878
880
  id: z.string().describe("Document ID"),
@@ -965,7 +967,7 @@ export function createServer(options = {}) {
965
967
  });
966
968
  server.registerTool("set_kv", {
967
969
  ...toolMeta("Set KV value", DESTRUCTIVE),
968
- description: "Set or update a key in an existing BrewPage KV store. Requires owner token. The key name `hosting` is reserved." + OLD_READ_ONLY_TEXT,
970
+ description: "Set or update a key in an existing BrewPage KV store. Requires owner token. The key name `hosting` is reserved." + OLD_READ_ONLY_TEXT + " " + NO_PUBLIC_CREDENTIALS,
969
971
  inputSchema: {
970
972
  namespace: z.string().describe("KV store namespace"),
971
973
  id: z.string().describe("KV store ID"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brewpage-mcp",
3
- "version": "1.16.0",
3
+ "version": "1.16.1",
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",