mcp-server-jotbird 0.1.5 → 0.1.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 +15 -3
- package/dist/index.js +48 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -115,22 +115,24 @@ Ask your LLM things like:
|
|
|
115
115
|
- *"Update my published page 'my-notes' with this new section"*
|
|
116
116
|
- *"Show me all my published pages"*
|
|
117
117
|
- *"Take down the page with slug 'old-draft'"*
|
|
118
|
+
- *"Publish this at my namespace as 'project-notes'"* (Pro)
|
|
118
119
|
|
|
119
120
|
## Tools
|
|
120
121
|
|
|
121
122
|
### `publish`
|
|
122
123
|
|
|
123
|
-
Publish Markdown content as a formatted web page with a shareable URL. To update an existing page, pass its slug.
|
|
124
|
+
Publish Markdown content as a formatted web page with a shareable URL. To update an existing page, pass its slug. Pro users with a username can publish at a permanent namespaced URL by passing `namespaced: true`.
|
|
124
125
|
|
|
125
126
|
| Parameter | Required | Description |
|
|
126
127
|
|-----------|----------|-------------|
|
|
127
128
|
| `markdown` | Yes | Markdown content (max 256 KB). Supports footnotes, task lists, definition lists, math (`$…$` and `$$…$$`), and inline HTML. |
|
|
128
129
|
| `title` | No | Page title. If omitted, the first H1 in the Markdown is used. |
|
|
129
|
-
| `slug` | No |
|
|
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. |
|
|
131
|
+
| `namespaced` | No | When `true`, publish at your namespace: `share.jotbird.com/@username/slug`. Requires Pro and a username set in Account Settings. |
|
|
130
132
|
|
|
131
133
|
### `list_documents`
|
|
132
134
|
|
|
133
|
-
List the user's published pages. Returns each page's title, URL, slug, and
|
|
135
|
+
List the user's published pages. Returns each page's title, URL, slug, expiration date, and username (for namespaced pages).
|
|
134
136
|
|
|
135
137
|
No parameters.
|
|
136
138
|
|
|
@@ -141,6 +143,16 @@ Permanently delete a published page and its shareable URL. Cannot be undone.
|
|
|
141
143
|
| Parameter | Required | Description |
|
|
142
144
|
|-----------|----------|-------------|
|
|
143
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. |
|
|
147
|
+
|
|
148
|
+
## Namespaced URLs (Pro)
|
|
149
|
+
|
|
150
|
+
Pro users with a username set in Account Settings can publish at permanent, human-readable URLs like `share.jotbird.com/@username/my-page`. Just ask your AI:
|
|
151
|
+
|
|
152
|
+
> "Publish this at my namespace as 'project-notes'."
|
|
153
|
+
> → `share.jotbird.com/@clayton-myers/project-notes`
|
|
154
|
+
|
|
155
|
+
Namespaced pages never expire and keep the same URL across updates. Set your username in **Account Settings** at [jotbird.com](https://www.jotbird.com).
|
|
144
156
|
|
|
145
157
|
## Limits
|
|
146
158
|
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import { z } from "zod";
|
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
// Configuration
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
|
-
const VERSION = "0.1.
|
|
19
|
+
const VERSION = "0.1.6";
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
21
|
// Argument schemas
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
@@ -26,10 +26,23 @@ const PublishArgs = z.object({
|
|
|
26
26
|
slug: z
|
|
27
27
|
.string()
|
|
28
28
|
.optional()
|
|
29
|
-
.describe("
|
|
29
|
+
.describe("For flat documents: slug of an existing page to update. " +
|
|
30
|
+
"For namespaced documents (namespaced: true): required — publish at @username/slug. " +
|
|
31
|
+
"Omit (with namespaced: false/absent) to publish a new page with an auto-generated slug."),
|
|
32
|
+
namespaced: z
|
|
33
|
+
.boolean()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("When true, publish at your namespace: share.jotbird.com/@username/slug. " +
|
|
36
|
+
"Requires a Pro subscription and a username set in Account Settings. " +
|
|
37
|
+
"A slug is required when namespaced is true."),
|
|
30
38
|
});
|
|
31
39
|
const DeleteArgs = z.object({
|
|
32
40
|
slug: z.string().describe("The slug of the document to delete"),
|
|
41
|
+
namespaced: z
|
|
42
|
+
.boolean()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("When true, delete the document at @username/slug instead of the flat URL. " +
|
|
45
|
+
"Requires a Pro subscription and a username set in Account Settings."),
|
|
33
46
|
});
|
|
34
47
|
// ---------------------------------------------------------------------------
|
|
35
48
|
// MCP server factory (exported for testing)
|
|
@@ -66,8 +79,11 @@ export function createServer(apiKey, apiBase) {
|
|
|
66
79
|
async function listDocuments() {
|
|
67
80
|
return apiRequest("/api/v1/documents");
|
|
68
81
|
}
|
|
69
|
-
async function deleteDocument(slug) {
|
|
70
|
-
|
|
82
|
+
async function deleteDocument(slug, namespaced) {
|
|
83
|
+
const params = new URLSearchParams({ slug });
|
|
84
|
+
if (namespaced)
|
|
85
|
+
params.set("namespaced", "true");
|
|
86
|
+
return apiRequest(`/api/v1/documents?${params.toString()}`, { method: "DELETE" });
|
|
71
87
|
}
|
|
72
88
|
// -- Server setup --
|
|
73
89
|
const server = new Server({ name: "mcp-server-jotbird", version: VERSION }, { capabilities: { tools: {} } });
|
|
@@ -79,7 +95,9 @@ export function createServer(apiKey, apiBase) {
|
|
|
79
95
|
"shareable URL on JotBird. Use when the user wants to share, publish, " +
|
|
80
96
|
"or host written content online. Supports full Markdown including " +
|
|
81
97
|
"headings, lists, code blocks, tables, footnotes, and math. " +
|
|
82
|
-
"To update an existing page, pass its slug."
|
|
98
|
+
"To update an existing page, pass its slug. " +
|
|
99
|
+
"Pro users with a username can publish at a permanent namespaced URL " +
|
|
100
|
+
"(share.jotbird.com/@username/slug) by passing namespaced: true and a slug.",
|
|
83
101
|
inputSchema: {
|
|
84
102
|
type: "object",
|
|
85
103
|
properties: {
|
|
@@ -95,10 +113,17 @@ export function createServer(apiKey, apiBase) {
|
|
|
95
113
|
},
|
|
96
114
|
slug: {
|
|
97
115
|
type: "string",
|
|
98
|
-
description: "
|
|
99
|
-
"
|
|
116
|
+
description: "For flat documents: slug of an existing page to update. " +
|
|
117
|
+
"Omit to publish a new page with an auto-generated slug. " +
|
|
118
|
+
"For namespaced documents (namespaced: true): required — publish at @username/slug. " +
|
|
100
119
|
"Use list_documents to find slugs of existing pages.",
|
|
101
120
|
},
|
|
121
|
+
namespaced: {
|
|
122
|
+
type: "boolean",
|
|
123
|
+
description: "When true, publish at your namespace: share.jotbird.com/@username/slug. " +
|
|
124
|
+
"Requires a Pro subscription and a username set in Account Settings. " +
|
|
125
|
+
"A slug must be provided.",
|
|
126
|
+
},
|
|
102
127
|
},
|
|
103
128
|
required: ["markdown"],
|
|
104
129
|
},
|
|
@@ -117,7 +142,7 @@ export function createServer(apiKey, apiBase) {
|
|
|
117
142
|
name: "delete",
|
|
118
143
|
description: "Permanently delete a published JotBird page and its shareable URL. " +
|
|
119
144
|
"Use when the user wants to take down or remove a published page. " +
|
|
120
|
-
"This cannot be undone.",
|
|
145
|
+
"This cannot be undone. For namespaced pages (@username/slug), pass namespaced: true.",
|
|
121
146
|
inputSchema: {
|
|
122
147
|
type: "object",
|
|
123
148
|
properties: {
|
|
@@ -126,6 +151,11 @@ export function createServer(apiKey, apiBase) {
|
|
|
126
151
|
description: "Slug of the page to delete (e.g. 'my-notes'). " +
|
|
127
152
|
"Use list_documents to find slugs.",
|
|
128
153
|
},
|
|
154
|
+
namespaced: {
|
|
155
|
+
type: "boolean",
|
|
156
|
+
description: "When true, delete the document at @username/slug instead of the flat URL. " +
|
|
157
|
+
"Requires a Pro subscription and a username set in Account Settings.",
|
|
158
|
+
},
|
|
129
159
|
},
|
|
130
160
|
required: ["slug"],
|
|
131
161
|
},
|
|
@@ -137,18 +167,21 @@ export function createServer(apiKey, apiBase) {
|
|
|
137
167
|
try {
|
|
138
168
|
switch (name) {
|
|
139
169
|
case "publish": {
|
|
140
|
-
const { markdown, title, slug } = PublishArgs.parse(args);
|
|
141
|
-
const result = await publishDocument({ markdown, title, slug });
|
|
170
|
+
const { markdown, title, slug, namespaced } = PublishArgs.parse(args);
|
|
171
|
+
const result = await publishDocument({ markdown, title, slug, namespaced });
|
|
142
172
|
const action = result.created ? "Published" : "Updated";
|
|
143
173
|
const expiry = result.expiresAt
|
|
144
174
|
? `\nExpires: ${result.expiresAt}`
|
|
145
175
|
: "\nExpires: never (Pro)";
|
|
176
|
+
const identifier = result.username
|
|
177
|
+
? `@${result.username}/${result.slug}`
|
|
178
|
+
: result.slug;
|
|
146
179
|
return {
|
|
147
180
|
content: [
|
|
148
181
|
{
|
|
149
182
|
type: "text",
|
|
150
183
|
text: `${action}: ${result.url}\n` +
|
|
151
|
-
`Slug: ${
|
|
184
|
+
`Slug: ${identifier}\n` +
|
|
152
185
|
`Title: ${result.title ?? "(untitled)"}` +
|
|
153
186
|
expiry,
|
|
154
187
|
},
|
|
@@ -166,7 +199,8 @@ export function createServer(apiKey, apiBase) {
|
|
|
166
199
|
}
|
|
167
200
|
const lines = documents.map((d) => {
|
|
168
201
|
const expires = d.expiresAt ?? "never";
|
|
169
|
-
|
|
202
|
+
const identifier = d.username ? `@${d.username}/${d.slug}` : d.slug;
|
|
203
|
+
return `- **${d.title || "(untitled)"}**\n ${d.url}\n slug: ${identifier} · expires: ${expires}`;
|
|
170
204
|
});
|
|
171
205
|
return {
|
|
172
206
|
content: [
|
|
@@ -178,8 +212,8 @@ export function createServer(apiKey, apiBase) {
|
|
|
178
212
|
};
|
|
179
213
|
}
|
|
180
214
|
case "delete": {
|
|
181
|
-
const { slug } = DeleteArgs.parse(args);
|
|
182
|
-
await deleteDocument(slug);
|
|
215
|
+
const { slug, namespaced } = DeleteArgs.parse(args);
|
|
216
|
+
await deleteDocument(slug, namespaced);
|
|
183
217
|
return {
|
|
184
218
|
content: [
|
|
185
219
|
{
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,kEAAkE;AAClE,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;QACxB,KAAK,EAAE,GAAG,CAAC,OAAO;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|