mcp-server-jotbird 0.1.7 → 0.2.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
@@ -2,7 +2,7 @@
2
2
 
3
3
  An [MCP](https://modelcontextprotocol.io/) server for [JotBird](https://www.jotbird.com) that lets any LLM publish Markdown as beautifully formatted, shareable web pages.
4
4
 
5
- Write a document in conversation, publish it with one tool call, and get back a live URL. Supports full Markdown — headings, code blocks, tables, footnotes, math, task lists, and more. Update or delete pages by slug.
5
+ Write a document in conversation, publish it with one tool call, and get back a live URL. Supports full Markdown — headings, code blocks, tables, footnotes, math, task lists, and more. Update or delete pages by slug, and view or change page settings (theme, branding, visibility, password protection).
6
6
 
7
7
  Works with Claude, ChatGPT, Gemini, and any MCP-compatible client.
8
8
 
@@ -10,7 +10,9 @@ Works with Claude, ChatGPT, Gemini, and any MCP-compatible client.
10
10
 
11
11
  ### 1. Get an API key
12
12
 
13
- Sign in at [jotbird.com](https://www.jotbird.com), open **Account > API keys**, and generate a key.
13
+ Sign in at [jotbird.com](https://www.jotbird.com), open **Account Settings** from the account menu, and generate a key in the **API Keys** section.
14
+
15
+ Your key starts with `jb_` and is **shown only once** — copy it before closing the dialog.
14
16
 
15
17
  ### 2. Add to your client
16
18
 
@@ -116,6 +118,10 @@ Ask your LLM things like:
116
118
  - *"Show me all my published pages"*
117
119
  - *"Take down the page with slug 'old-draft'"*
118
120
  - *"Publish this at my namespace as 'project-notes'"* (Pro)
121
+ - *"What are the settings on my page 'my-notes'?"*
122
+ - *"Switch my page 'launch-plan' to the essay theme"* (Pro)
123
+ - *"Make my page 'resume' public so search engines can find it"*
124
+ - *"Password-protect my page 'board-deck'"* (Pro)
119
125
 
120
126
  ## Tools
121
127
 
@@ -127,9 +133,15 @@ Publish Markdown content as a formatted web page with a shareable URL. To update
127
133
  |-----------|----------|-------------|
128
134
  | `markdown` | Yes | Markdown content (max 256 KB). Supports footnotes, task lists, definition lists, math (`$…$` and `$$…$$`), and inline HTML. |
129
135
  | `title` | No | Page title. If omitted, the first H1 in the Markdown is used. |
130
- | `slug` | No | For flat documents: slug of an existing page to update. Omit to publish a new page with an auto-generated slug. For namespaced documents (`namespaced: true`): required — publishes at `@username/slug`. Use `list_documents` to find slugs. |
136
+ | `slug` | No | Slug of an **existing** page to update. Omit to publish a new page. For namespaced pages (`namespaced: true`): required — publishes at `@username/slug`. Use `list_documents` to find slugs. |
131
137
  | `namespaced` | No | When `true`, publish at your namespace: `share.jotbird.com/@username/slug`. Requires Pro and a username set in Account Settings. |
132
138
 
139
+ > ⚠️ **`slug` cannot name a *new* page.** It identifies a page you already own, so that publishing
140
+ > again updates it in place. If you pass a slug that matches no page on your account, it is
141
+ > **silently ignored** and the page is published at an auto-generated slug
142
+ > (`share.jotbird.com/brave-calm-meadow`) — so don't count on getting the URL you asked for.
143
+ > New pages get a random slug; the way to choose a URL is a **namespaced** page (Pro), below.
144
+
133
145
  ### `list_documents`
134
146
 
135
147
  List the user's published pages. Returns each page's title, URL, slug, expiration date, and username (for namespaced pages).
@@ -142,8 +154,34 @@ Permanently delete a published page and its shareable URL. Cannot be undone.
142
154
 
143
155
  | Parameter | Required | Description |
144
156
  |-----------|----------|-------------|
145
- | `slug` | Yes | Slug of the page to delete. Use `list_documents` to find slugs. |
146
- | `namespaced` | No | When `true`, delete the document at `@username/slug` instead of the flat URL. Requires Pro and a username. |
157
+ | `slug` | Yes | Slug of the page to delete, or the full `@username/slug` identifier for a namespaced page. Use `list_documents` to find slugs. |
158
+ | `namespaced` | No | When `true`, delete the document at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. Requires Pro and a username. |
159
+
160
+ ### `get_settings`
161
+
162
+ Get a published page's settings: theme, branding, visibility, tags, and expiration. The page password is write-only and never returned.
163
+
164
+ | Parameter | Required | Description |
165
+ |-----------|----------|-------------|
166
+ | `slug` | Yes | Slug of the page, or the full `@username/slug` identifier. Use `list_documents` to find slugs. |
167
+ | `namespaced` | No | When `true`, resolve the slug at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. |
168
+
169
+ ### `update_settings`
170
+
171
+ Update a published page's settings. Only the fields you pass change; everything else is preserved. Enabling a Pro feature (non-default theme, `hideBranding: true`, password protection) requires a Pro subscription — any account can clear them.
172
+
173
+ | Parameter | Required | Description |
174
+ |-----------|----------|-------------|
175
+ | `slug` | Yes | Slug of the page to update, or the full `@username/slug` identifier. |
176
+ | `namespaced` | No | When `true`, resolve the slug at `@username/slug` instead of the flat URL. Unnecessary if the slug already starts with `@username/`. |
177
+ | `theme` | No | `default`, `minimal`, `essay`, or `terminal`. Non-default themes are Pro-only. |
178
+ | `hideBranding` | No | Hide the "Published with JotBird" footer. Enabling is Pro-only. |
179
+ | `visibility` | No | `unlisted` (default), `public` (search-indexable), or `password` (Pro). Setting a visibility clears any previous password. |
180
+ | `password` | No | Required with (and only valid with) `visibility: "password"`. Never echoed back. |
181
+
182
+ At least one of `theme`, `hideBranding`, or `visibility` must be provided. `tags` are reported by `get_settings` but can't be changed here — set them in the web app.
183
+
184
+ Settings changes are reflected in the API immediately, but the live page can take up to about a minute to reflect a visibility change as caches refresh. Theme and branding apply right away. Turning password protection *on* takes effect immediately, so a page is never left readable while the change propagates.
147
185
 
148
186
  ## Namespaced URLs (Pro)
149
187
 
@@ -160,9 +198,22 @@ Namespaced pages never expire and keep the same URL across updates. Set your use
160
198
  |--|------|-----|
161
199
  | Published pages | 10 | Unlimited |
162
200
  | Publishes per hour | 10 | 100 |
201
+ | Settings updates per hour | 10 | 100 |
163
202
  | Page expiration | 90 days | Never |
164
203
  | Max markdown size | 256 KB | 256 KB |
165
204
 
205
+ A few things worth knowing:
206
+
207
+ - **The 10-page cap counts *new* pages.** Updating a page you've already published is never blocked
208
+ by it, however many you have. Publishing an 11th new page on a free account fails with a "document
209
+ limit reached" error.
210
+ - **`update_settings` is rate-limited in its own bucket**, separate from publishing, so changing
211
+ settings doesn't eat your publish quota. Reading (`get_settings`, `list_documents`) isn't limited
212
+ at all. When you hit a limit, the tool tells you how long to wait.
213
+ - **Enabling a Pro-only setting on a free account fails and names the setting**, so your AI can tell
214
+ you exactly what needs an upgrade. Free accounts can always *clear* Pro settings
215
+ (`theme: "default"`, `hideBranding: false`) and switch between `unlisted` and `public`.
216
+
166
217
  ## Environment variables
167
218
 
168
219
  | Variable | Required | Description |
@@ -174,15 +225,19 @@ Namespaced pages never expire and keep the same URL across updates. Set your use
174
225
 
175
226
  ```bash
176
227
  npm install
177
- npm run build
228
+ npm run build # tsc → dist/
229
+ npm test # vitest
178
230
  ```
179
231
 
180
- Test locally:
232
+ Run the server against your account (it speaks MCP over stdio, so it will sit waiting for a
233
+ client — that's what a successful start looks like):
181
234
 
182
235
  ```bash
183
236
  JOTBIRD_API_KEY=jb_your_key node dist/index.js
184
237
  ```
185
238
 
239
+ Point it at a different backend with `JOTBIRD_API_URL`.
240
+
186
241
  ## License
187
242
 
188
243
  MIT
package/dist/index.js CHANGED
@@ -32,24 +32,142 @@ const PublishArgs = z.object({
32
32
  slug: z
33
33
  .string()
34
34
  .optional()
35
- .describe("For flat documents: slug of an existing page to update. " +
36
- "For namespaced documents (namespaced: true): required publish at @username/slug. " +
37
- "Omit (with namespaced: false/absent) to publish a new page with an auto-generated slug."),
35
+ .describe("Slug of an existing page to update. A slug that matches no page you own is IGNORED " +
36
+ "(the page publishes at an auto-generated slug) — it cannot name a NEW flat page. " +
37
+ "For namespaced documents (namespaced: true): required publish at @username/slug."),
38
38
  namespaced: z
39
39
  .boolean()
40
40
  .optional()
41
41
  .describe("When true, publish at your namespace: share.jotbird.com/@username/slug. " +
42
42
  "Requires a Pro subscription and a username set in Account Settings. " +
43
43
  "A slug is required when namespaced is true."),
44
- });
45
- const DeleteArgs = z.object({
46
- slug: z.string().describe("The slug of the document to delete"),
44
+ })
45
+ // Strict for the same reason as the settings schemas: a stripped key is a
46
+ // silent partial success. A model that passes `theme` here (settings belong to
47
+ // update_settings) should be told, not quietly published with the default.
48
+ .strict();
49
+ const THEMES = ["default", "minimal", "essay", "terminal"];
50
+ const VISIBILITIES = ["unlisted", "password", "public"];
51
+ /**
52
+ * Split an "@username/slug" identifier into its parts.
53
+ *
54
+ * list_documents reports a namespaced page's identity as "@username/slug", and
55
+ * the tool descriptions point at it to find slugs — so that string is exactly
56
+ * what a model passes back. Taken literally it addresses a FLAT slug that does
57
+ * not exist, and the call 404s on a page that plainly does. Mirrors
58
+ * parseSlugValue/resolveTarget in the CLI.
59
+ */
60
+ function parseTarget(slug, namespaced) {
61
+ if (slug.startsWith("@") && slug.includes("/")) {
62
+ return { slug: slug.slice(slug.indexOf("/") + 1), namespaced: true };
63
+ }
64
+ return { slug, namespaced: Boolean(namespaced) };
65
+ }
66
+ // Every tool that addresses an existing page shares this target, and it
67
+ // NORMALIZES ITSELF: parsing yields the resolved {slug, namespaced} and nothing
68
+ // else, so a handler cannot forget to call parseTarget (three hand-written call
69
+ // sites is how the "@username/slug" bug shipped in the first place). `target`
70
+ // preserves what the caller actually typed, for echoing back in messages.
71
+ //
72
+ // The post-transform length check is the load-bearing half: "@user/" splits to
73
+ // an EMPTY slug, which would otherwise sail through `z.string()` and request
74
+ // `/api/v1/documents//settings` — and `delete` would then cheerfully confirm a
75
+ // deletion that never happened.
76
+ //
77
+ // `.strict()` matters for the same class of reason: zod's default is to STRIP
78
+ // unknown keys, which would turn a patch the server rejects (its contract 400s
79
+ // on an unknown key) into a silent partial success. `tags` is the trap —
80
+ // get_settings reports them, so a model naturally tries to set them, and a
81
+ // stripped key would come back as "Settings updated".
82
+ const TargetShape = {
83
+ slug: z
84
+ .string()
85
+ .trim()
86
+ .min(1)
87
+ .describe("Slug of the page, or the full @username/slug identifier"),
47
88
  namespaced: z
48
89
  .boolean()
49
90
  .optional()
50
- .describe("When true, delete the document at @username/slug instead of the flat URL. " +
51
- "Requires a Pro subscription and a username set in Account Settings."),
52
- });
91
+ .describe("When true, resolve the slug at @username/slug instead of the flat URL."),
92
+ };
93
+ function normalizeTarget(a) {
94
+ return { ...a, ...parseTarget(a.slug, a.namespaced), target: a.slug };
95
+ }
96
+ const EMPTY_SLUG = 'slug must name a page, e.g. "my-notes" or "@username/my-notes".';
97
+ const hasSlug = (a) => a.slug.length > 0;
98
+ const TargetArgs = z.object(TargetShape).strict();
99
+ // get_settings and delete take nothing but a target, so they share one schema.
100
+ const NormalizedTargetArgs = TargetArgs.transform(normalizeTarget).refine(hasSlug, { message: EMPTY_SLUG, path: ["slug"] });
101
+ const GetSettingsArgs = NormalizedTargetArgs;
102
+ const DeleteArgs = NormalizedTargetArgs;
103
+ const UpdateSettingsArgs = TargetArgs.extend({
104
+ theme: z.enum(THEMES).optional().describe("Page theme"),
105
+ hideBranding: z
106
+ .boolean()
107
+ .optional()
108
+ .describe("Hide the JotBird footer branding (true is Pro-only)"),
109
+ visibility: z.enum(VISIBILITIES).optional().describe("Page visibility state"),
110
+ password: z
111
+ .string()
112
+ .optional()
113
+ .describe("Page password; required with (and only valid with) visibility \"password\""),
114
+ })
115
+ // These mirror the server's validation. Rejecting locally matters because a
116
+ // PATCH is charged against the hourly rate limit BEFORE validation — a
117
+ // request the server will always refuse would still burn a write.
118
+ //
119
+ // One superRefine rather than chained .refine()s: chained refinements abort at
120
+ // the first failure, so `{password}` with no visibility reported only the
121
+ // generic "provide at least one setting" and never mentioned the password it
122
+ // was about to drop. superRefine collects every issue, and the explicit paths
123
+ // keep the rendered message field-anchored.
124
+ .superRefine((a, ctx) => {
125
+ if (a.password !== undefined && a.visibility !== "password") {
126
+ ctx.addIssue({
127
+ code: z.ZodIssueCode.custom,
128
+ path: ["password"],
129
+ message: 'password is only valid with visibility "password".',
130
+ });
131
+ }
132
+ if (a.visibility === "password" && (a.password ?? "") === "") {
133
+ ctx.addIssue({
134
+ code: z.ZodIssueCode.custom,
135
+ path: ["password"],
136
+ message: 'visibility "password" requires a non-empty password.',
137
+ });
138
+ }
139
+ if (a.theme === undefined &&
140
+ a.hideBranding === undefined &&
141
+ a.visibility === undefined) {
142
+ ctx.addIssue({
143
+ code: z.ZodIssueCode.custom,
144
+ path: [],
145
+ message: "Provide at least one setting to change: theme, hideBranding, or visibility.",
146
+ });
147
+ }
148
+ })
149
+ .transform(normalizeTarget)
150
+ .refine(hasSlug, { message: EMPTY_SLUG, path: ["slug"] });
151
+ // ---------------------------------------------------------------------------
152
+ // Formatting
153
+ // ---------------------------------------------------------------------------
154
+ function formatSettings(s) {
155
+ const identifier = s.username ? `@${s.username}/${s.slug}` : s.slug;
156
+ const lines = [
157
+ `Slug: ${identifier}`,
158
+ `URL: ${s.url}`,
159
+ // `||`, not `??`: an untitled page comes back as "" as readily as null, and
160
+ // `??` would render a bare "Title: ".
161
+ `Title: ${s.title || "(untitled)"}`,
162
+ `Theme: ${s.theme}`,
163
+ `Branding: ${s.hideBranding ? "hidden" : "shown"}`,
164
+ `Visibility: ${s.visibility}`,
165
+ ];
166
+ if (s.tags?.length)
167
+ lines.push(`Tags: ${s.tags.join(", ")}`);
168
+ lines.push(`Expires: ${s.expiresAt ?? "never"}`);
169
+ return lines.join("\n");
170
+ }
53
171
  // ---------------------------------------------------------------------------
54
172
  // MCP server factory (exported for testing)
55
173
  // ---------------------------------------------------------------------------
@@ -71,8 +189,14 @@ export function createServer(apiKey, apiBase) {
71
189
  const retryAfter = res.headers.get("Retry-After");
72
190
  throw new Error(`Rate limit exceeded.${retryAfter ? ` Try again in ${retryAfter} seconds.` : ""}`);
73
191
  }
74
- const msg = data?.error ?? `HTTP ${res.status}`;
75
- throw new Error(String(msg));
192
+ const body = data;
193
+ let msg = String(body?.error ?? `HTTP ${res.status}`);
194
+ // Pro-gated settings 403s name the offending setting — surface it so the
195
+ // model can tell the user which feature needs Pro instead of guessing.
196
+ if (res.status === 403 && body?.setting) {
197
+ msg += ` (Pro required for: ${String(body.setting)})`;
198
+ }
199
+ throw new Error(msg);
76
200
  }
77
201
  return data;
78
202
  }
@@ -91,6 +215,21 @@ export function createServer(apiKey, apiBase) {
91
215
  params.set("namespaced", "true");
92
216
  return apiRequest(`/api/v1/documents?${params.toString()}`, { method: "DELETE" });
93
217
  }
218
+ function settingsPath(slug, namespaced) {
219
+ let path = `/api/v1/documents/${encodeURIComponent(slug)}/settings`;
220
+ if (namespaced)
221
+ path += "?namespaced=true";
222
+ return path;
223
+ }
224
+ async function getSettings(slug, namespaced) {
225
+ return apiRequest(settingsPath(slug, namespaced));
226
+ }
227
+ async function updateSettings(slug, patch, namespaced) {
228
+ return apiRequest(settingsPath(slug, namespaced), {
229
+ method: "PATCH",
230
+ body: JSON.stringify(patch),
231
+ });
232
+ }
94
233
  // -- Server setup --
95
234
  const server = new Server({ name: "mcp-server-jotbird", version: VERSION }, { capabilities: { tools: {} } });
96
235
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
@@ -119,10 +258,12 @@ export function createServer(apiKey, apiBase) {
119
258
  },
120
259
  slug: {
121
260
  type: "string",
122
- description: "For flat documents: slug of an existing page to update. " +
123
- "Omit to publish a new page with an auto-generated slug. " +
124
- "For namespaced documents (namespaced: true): required publish at @username/slug. " +
125
- "Use list_documents to find slugs of existing pages.",
261
+ description: "Slug of an EXISTING page to update — NOT a way to choose the URL of a new " +
262
+ "page. If it does not match a page this account already owns, it is IGNORED " +
263
+ "and the page is published at an auto-generated slug instead, so never promise " +
264
+ "the user a URL you passed here — report the one the tool returns. " +
265
+ "Omit it to publish a new page. To choose a new page's URL, use namespaced: " +
266
+ "true together with a slug (Pro). Use list_documents to find existing slugs.",
126
267
  },
127
268
  namespaced: {
128
269
  type: "boolean",
@@ -154,18 +295,95 @@ export function createServer(apiKey, apiBase) {
154
295
  properties: {
155
296
  slug: {
156
297
  type: "string",
157
- description: "Slug of the page to delete (e.g. 'my-notes'). " +
298
+ description: "Slug of the page to delete (e.g. 'my-notes'), or the full " +
299
+ "'@username/my-notes' identifier for a namespaced page. " +
158
300
  "Use list_documents to find slugs.",
159
301
  },
160
302
  namespaced: {
161
303
  type: "boolean",
162
304
  description: "When true, delete the document at @username/slug instead of the flat URL. " +
305
+ "Unnecessary if the slug already starts with '@username/'. " +
163
306
  "Requires a Pro subscription and a username set in Account Settings.",
164
307
  },
165
308
  },
166
309
  required: ["slug"],
167
310
  },
168
311
  },
312
+ {
313
+ name: "get_settings",
314
+ description: "Get a published JotBird page's settings: theme, branding, visibility " +
315
+ "(unlisted/password/public), tags, and expiration. Use before changing " +
316
+ "settings or when the user asks how a page is configured. The page " +
317
+ "password is write-only and never returned.",
318
+ inputSchema: {
319
+ type: "object",
320
+ properties: {
321
+ slug: {
322
+ type: "string",
323
+ description: "Slug of the page (e.g. 'my-notes'), or the full '@username/my-notes' " +
324
+ "identifier for a namespaced page. Use list_documents to find slugs.",
325
+ },
326
+ namespaced: {
327
+ type: "boolean",
328
+ description: "When true, resolve the slug at @username/slug instead of the flat URL. " +
329
+ "Unnecessary if the slug already starts with '@username/'.",
330
+ },
331
+ },
332
+ required: ["slug"],
333
+ },
334
+ },
335
+ {
336
+ name: "update_settings",
337
+ description: "Update a published JotBird page's settings: theme, branding, and " +
338
+ "visibility. Only the provided fields change; others are preserved. " +
339
+ "Pro-only: non-default themes, hiding branding, and password " +
340
+ "protection (free accounts can clear these and switch " +
341
+ "unlisted/public). Visibility semantics: 'unlisted' (default — not " +
342
+ "indexed by search engines), 'public' (indexable, listed in the " +
343
+ "sitemap), 'password' (Pro — requires the password argument; setting " +
344
+ "a visibility clears any previous password). The API reflects changes " +
345
+ "immediately, but the live page can take up to about a minute to " +
346
+ "reflect a visibility change as caches refresh — a briefly stale page " +
347
+ "is not a failed update.",
348
+ inputSchema: {
349
+ type: "object",
350
+ properties: {
351
+ slug: {
352
+ type: "string",
353
+ description: "Slug of the page to update (e.g. 'my-notes'), or the full " +
354
+ "'@username/my-notes' identifier for a namespaced page. " +
355
+ "Use list_documents to find slugs.",
356
+ },
357
+ namespaced: {
358
+ type: "boolean",
359
+ description: "When true, resolve the slug at @username/slug instead of the flat URL. " +
360
+ "Unnecessary if the slug already starts with '@username/'.",
361
+ },
362
+ theme: {
363
+ type: "string",
364
+ enum: [...THEMES],
365
+ description: "Page theme. Any non-default theme requires a Pro subscription.",
366
+ },
367
+ hideBranding: {
368
+ type: "boolean",
369
+ description: "Hide the 'Published with JotBird' footer. Enabling requires Pro; " +
370
+ "any account can set it back to false.",
371
+ },
372
+ visibility: {
373
+ type: "string",
374
+ enum: [...VISIBILITIES],
375
+ description: "Page visibility: 'unlisted' (default), 'public' (search-indexable), " +
376
+ "or 'password' (Pro; requires the password argument).",
377
+ },
378
+ password: {
379
+ type: "string",
380
+ description: "Page password. Required with (and only valid with) visibility " +
381
+ "'password'. Write-only — it is never echoed back.",
382
+ },
383
+ },
384
+ required: ["slug"],
385
+ },
386
+ },
169
387
  ],
170
388
  }));
171
389
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
@@ -218,13 +436,48 @@ export function createServer(apiKey, apiBase) {
218
436
  };
219
437
  }
220
438
  case "delete": {
221
- const { slug, namespaced } = DeleteArgs.parse(args);
439
+ const { slug, namespaced, target } = DeleteArgs.parse(args);
222
440
  await deleteDocument(slug, namespaced);
223
441
  return {
224
442
  content: [
225
443
  {
226
444
  type: "text",
227
- text: `Deleted document "${slug}".`,
445
+ text: `Deleted document "${target}".`,
446
+ },
447
+ ],
448
+ };
449
+ }
450
+ case "get_settings": {
451
+ const { slug, namespaced } = GetSettingsArgs.parse(args);
452
+ const settings = await getSettings(slug, namespaced);
453
+ return {
454
+ content: [{ type: "text", text: formatSettings(settings) }],
455
+ };
456
+ }
457
+ case "update_settings": {
458
+ const { slug, namespaced, target: _target, ...patch } = UpdateSettingsArgs.parse(args);
459
+ // Pre-flight every write with the GET (which is not rate-limited):
460
+ // PATCH is charged against the hourly write limit BEFORE validation,
461
+ // even when it 404s, so a mistyped slug would otherwise silently eat
462
+ // one of a free account's 10 writes per hour.
463
+ //
464
+ // The result is deliberately NOT used to skip a PATCH whose values
465
+ // already match. Re-applying identical settings is the documented way
466
+ // to repair drift and to finish a partially-applied patch ("a retry of
467
+ // the same PATCH is idempotent" — PAGE_SETTINGS_ARCHITECTURE.md), and
468
+ // the CLI always writes. Saving a rate-limit unit isn't worth being the
469
+ // one client that can't force a re-apply.
470
+ await getSettings(slug, namespaced);
471
+ const settings = await updateSettings(slug, patch, namespaced);
472
+ const note = patch.visibility !== undefined
473
+ ? "\n\nNote: the live page can take up to about a minute to reflect " +
474
+ "a visibility change as caches refresh."
475
+ : "";
476
+ return {
477
+ content: [
478
+ {
479
+ type: "text",
480
+ text: `Settings updated.\n${formatSettings(settings)}${note}`,
228
481
  },
229
482
  ],
230
483
  };
@@ -240,8 +493,10 @@ export function createServer(apiKey, apiBase) {
240
493
  }
241
494
  catch (error) {
242
495
  if (error instanceof z.ZodError) {
496
+ // Cross-field refinements can carry an empty path; prefixing those with
497
+ // ": " renders a stray double colon ("Validation error: : Provide …").
243
498
  const issues = error.issues
244
- .map((i) => `${i.path.join(".")}: ${i.message}`)
499
+ .map((i) => (i.path.length ? `${i.path.join(".")}: ${i.message}` : i.message))
245
500
  .join("; ");
246
501
  return {
247
502
  content: [
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-jotbird",
3
- "version": "0.1.7",
3
+ "version": "0.2.1",
4
4
  "description": "MCP server for JotBird – publish Markdown documents from any LLM",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",