brewpage-mcp 1.16.8 → 1.16.10

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.8
20
+ npx -y brewpage-mcp@1.16.10
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.8"]
53
+ "args": ["-y", "brewpage-mcp@1.16.10"]
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.8
64
+ claude mcp add --transport stdio --scope project brewpage -- npx -y brewpage-mcp@1.16.10
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.8"]
78
+ "args": ["-y", "brewpage-mcp@1.16.10"]
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.8"]
92
+ "args": ["-y", "brewpage-mcp@1.16.10"]
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.8
100
+ npm install -g brewpage-mcp@1.16.10
101
101
  brewpage-mcp
102
102
  ```
103
103
 
@@ -108,9 +108,9 @@ Twenty tools are available. Creation returns an owner token; keep it to modify o
108
108
  | Tool | Purpose |
109
109
  |------|---------|
110
110
  | `publish_html` | Publish HTML, Markdown, code or JSON |
111
- | `update_html` | Replace page content; omitted format preserves stored format |
111
+ | `update_html` | Replace page content; omitted format preserves stored format, except a whole HTML document makes a Markdown page an HTML page |
112
112
  | `get_page` | Fetch raw page content |
113
- | `publish_file` | Fetch a source URL and upload the file |
113
+ | `publish_file` | Fetch a source URL and upload the file; HTML and Markdown become pages |
114
114
  | `publish_site` | Publish a single page or complete multi-file site bundle |
115
115
  | `republish_site` | Replace the complete site bundle at the same ID/link |
116
116
  | `publish_json` | Publish a JSON object, array, or JSON-encoded string |
@@ -176,7 +176,7 @@ publish_html(content="<h1>Report</h1>...", format="HTML", ttlDays=15)
176
176
 
177
177
  Update an existing HTML or Markdown page in place, preserving its short URL. Requires the original `ownerToken` returned at creation.
178
178
 
179
- Parameters: `namespace` (string), `id` (string), `content` (string, the new body), `ownerToken` (string), `format` (optional HTML/Markdown alias or supported code language such as `json`, `yaml`, or `typescript`; omitted preserves the stored format), `tags` (optional; replace the stored tags, `[]` clears, omitted keeps them).
179
+ Parameters: `namespace` (string), `id` (string), `content` (string, the new body), `ownerToken` (string), `format` (optional HTML/Markdown alias or supported code language such as `json`, `yaml`, or `typescript`; omitted preserves the stored format, except that a whole HTML document makes a Markdown page an HTML page), `tags` (optional; replace the stored tags, `[]` clears, omitted keeps them).
180
180
 
181
181
  An update never changes the link or delivery mode; an advisory `deliveryModeReason` and `Delivery notice:` line are printed when the server returns them.
182
182
 
@@ -216,6 +216,8 @@ Upload a file to BrewPage by fetching it from a URL. Returns a public URL and ow
216
216
 
217
217
  Parameters: `url` (string, the source URL to fetch), `namespace` (optional -- omit to keep the file private: unlisted and not indexed, anyone with the link can open it; `public` lists the file in the gallery and sitemap for Google, Bing and AI search), `filename` (optional custom filename), `deliveryMode` (optional). This tool does not expose base64, password, or TTL inputs.
218
218
 
219
+ An HTML or Markdown file becomes a page in any namespace and the returned link opens the page (notice `html-file-as-page` or `markdown-file-as-page`). A known file name extension decides, then the source's Content-Type, then the content; `.txt` and anything unclear stay files. An HTML file over the page limit or in no readable encoding stays a file shown as source (notice `html-file-as-source`). A file read in a guessed encoding is saved as UTF-8 (notice `charset-guessed`).
220
+
219
221
  Example prompt:
220
222
 
221
223
  > "Upload this PNG and give me a shareable link."
@@ -530,6 +532,14 @@ Every publish response includes an **owner token** -- the only credential that a
530
532
 
531
533
  ## Changelog
532
534
 
535
+ ## 1.16.10 -- 2026-11-05
536
+
537
+ - `publish_html`, `publish_file` and `update_html` texts state the format order: `format`, known file name extension, then for files the source's Content-Type, then the content. `publish_file`: HTML and Markdown become pages in any namespace. `update_html`: a whole HTML document makes a Markdown page an HTML page. Contract 2.10.2. `User-Agent: brewpage-mcp/1.16.10`.
538
+
539
+ ## 1.16.9 -- 2026-11-05
540
+
541
+ - A publish result without an owner token (`result.extras.isOwner` false) prints a neutral line instead of naming another owner. Contract 2.9.6. `User-Agent: brewpage-mcp/1.16.10`.
542
+
533
543
  ## 1.16.8 -- 2026-11-02
534
544
 
535
545
  - Local (stdio) `publish_file` source downloads send `User-Agent: brewpage-mcp/1.16.8`, like every BrewPage call.
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.8";
3
+ export declare const USER_AGENT = "brewpage-mcp/1.16.10";
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.8";
4
+ export const USER_AGENT = "brewpage-mcp/1.16.10";
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 };
@@ -223,7 +223,7 @@ export function createServer(options = {}) {
223
223
  const apiFetch = options.fetch ?? fetch;
224
224
  const server = new McpServer({
225
225
  name: "brewpage-mcp",
226
- version: "1.16.8",
226
+ version: "1.16.10",
227
227
  });
228
228
  /** Caller argument first, then the configured default; `fromEnv` marks the configured one. */
229
229
  function ownerTokenFor(argument) {
@@ -238,13 +238,13 @@ export function createServer(options = {}) {
238
238
  headers.set("User-Agent", userAgent);
239
239
  return apiFetch(url, { ...init, headers });
240
240
  }
241
- /** Owner token banner; the configured default is named, never repeated; none for a foreign existing publication.
241
+ /** Owner token banner; the configured default is named, never repeated; none when result.extras.isOwner is false.
242
242
  * Sign-in hint only for a token minted by this call (not `sent`, not the configured default). */
243
243
  function ownerTokenLines(data, purpose, sent) {
244
244
  const token = data.ownerToken;
245
245
  const extras = data.result?.extras;
246
246
  if (extras?.isOwner === false)
247
- return [``, `No owner token: an existing publication of another owner was returned.`];
247
+ return [``, `No owner token returned for this publication; it cannot be edited or deleted with this call.`];
248
248
  if (typeof token !== "string" || token.length === 0)
249
249
  return [];
250
250
  const shown = defaultOwnerToken !== undefined && token === defaultOwnerToken ? `${OWNER_TOKEN_ENV} (not repeated)` : token;
@@ -299,7 +299,7 @@ export function createServer(options = {}) {
299
299
  server.registerTool("publish_html", {
300
300
  ...toolMeta("Publish HTML, Markdown, code or JSON page", ADDITIVE),
301
301
  description: "Publish HTML, Markdown, code or JSON to BrewPage (max 5 MiB). " + PUBLIC_HINT +
302
- "Format omitted -> server detects it. Returns its primary share link and owner token. Optional password, TTL, filename, top toolbar (showTopBar). " +
302
+ "Format order: `format`, then a known filename extension, else the server detects it. Returns its primary share link and owner token. Optional password, TTL, filename, top toolbar (showTopBar). " +
303
303
  "A `public` page without deliveryMode may get its own subdomain if it needs browser features a BrewPage link lacks; " +
304
304
  "the result then has deliveryModeReason and a delivery notice. Markdown raw HTML is allowlisted: scripts, styles, event handlers, forms, embeds removed. " +
305
305
  MANAGE_URL_TEXT + " " + SECRETS,
@@ -310,7 +310,7 @@ export function createServer(options = {}) {
310
310
  .string()
311
311
  .min(1)
312
312
  .optional()
313
- .describe("Omit: server detects html, markdown, code or JSON. `html` keeps code/JSON as HTML; also markdown/md or a code language."),
313
+ .describe("Omit: a known filename extension decides, else the server detects html, markdown, code or JSON. `html` keeps code/JSON as HTML; also markdown/md or a code language. A whole HTML document sent as markdown becomes an HTML page."),
314
314
  namespace: z
315
315
  .string()
316
316
  .optional()
@@ -324,7 +324,7 @@ export function createServer(options = {}) {
324
324
  .string()
325
325
  .max(200)
326
326
  .optional()
327
- .describe("Optional original filename (≤200 chars). Used as title fallback when no <title>/<h1>; immutable on update."),
327
+ .describe("Optional original filename (≤200 chars). Without `format`, a known extension sets the format (.md stays Markdown, even a whole HTML document). Used as title fallback when no <title>/<h1>; immutable on update."),
328
328
  showTopBar: z
329
329
  .boolean()
330
330
  .optional()
@@ -371,6 +371,8 @@ export function createServer(options = {}) {
371
371
  server.registerTool("publish_file", {
372
372
  ...toolMeta("Publish file from URL", ADDITIVE),
373
373
  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. " +
374
+ "HTML and Markdown files become pages in any namespace and the link opens the page: a known file name extension decides, then the source's Content-Type, then the content; `.txt` and anything unclear stay files. " +
375
+ "An HTML file over the page limit or in no readable encoding stays a file shown as source (notice html-file-as-source). " +
374
376
  MANAGE_URL_TEXT + " " + SECRETS,
375
377
  inputSchema: {
376
378
  url: z.string().url().describe("URL of the file to upload"),
@@ -379,7 +381,7 @@ export function createServer(options = {}) {
379
381
  .string()
380
382
  .optional()
381
383
  .describe(NAMESPACE_DESCRIPTION),
382
- filename: z.string().optional().describe("Custom filename (optional)"),
384
+ filename: z.string().optional().describe("Custom filename (optional); replaces the URL's name, so its extension decides whether the file becomes a page"),
383
385
  ownerToken: z.string().optional().describe(CREATE_OWNER_TOKEN_DESCRIPTION),
384
386
  },
385
387
  }, async ({ url: fileUrl, namespace, filename, deliveryMode, ownerToken }) => {
@@ -756,6 +758,7 @@ export function createServer(options = {}) {
756
758
  server.registerTool("update_html", {
757
759
  ...toolMeta("Update page", DESTRUCTIVE),
758
760
  description: "Update an existing BrewPage HTML, Markdown, code or JSON page. Requires owner token. Returns the updated page metadata. " +
761
+ "Format omitted keeps the stored format, except a whole HTML document makes a Markdown page an HTML page. " +
759
762
  "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,
760
763
  inputSchema: {
761
764
  namespace: z.string().describe("Page namespace"),
@@ -765,7 +768,7 @@ export function createServer(options = {}) {
765
768
  format: z
766
769
  .string()
767
770
  .optional()
768
- .describe("Content format. Accepts (case-insensitive on html/markdown): 'html', 'markdown'/'md', or a code language — yaml, json, xml, csv, tsv, log, toml, ini, sql, sh, bat, env, javascript, typescript, tsx, jsx, css, properties, docker, txt. Omit to preserve the stored format."),
771
+ .describe("Content format. Accepts (case-insensitive on html/markdown): 'html', 'markdown'/'md', or a code language — yaml, json, xml, csv, tsv, log, toml, ini, sql, sh, bat, env, javascript, typescript, tsx, jsx, css, properties, docker, txt. Omit to preserve the stored format, except a whole HTML document makes a Markdown page an HTML page."),
769
772
  tags: z
770
773
  .array(z.string())
771
774
  .optional()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brewpage-mcp",
3
- "version": "1.16.8",
3
+ "version": "1.16.10",
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",