mcp-server-jotbird 0.1.4 → 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 +29 -8
- package/dist/index.js +48 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,11 +47,20 @@ claude mcp add jotbird -e JOTBIRD_API_KEY=jb_your_key_here -- npx -y mcp-server-
|
|
|
47
47
|
<details>
|
|
48
48
|
<summary><strong>ChatGPT</strong></summary>
|
|
49
49
|
|
|
50
|
-
ChatGPT
|
|
50
|
+
ChatGPT requires a remote (HTTP) MCP server — it doesn't support local stdio servers directly. You'll need to run a proxy that exposes the server over HTTP with a public tunnel:
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
```bash
|
|
53
|
+
JOTBIRD_API_KEY=jb_your_key_here npx mcp-proxy --shell --tunnel -- npx -y mcp-server-jotbird
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This starts the server and prints a public tunnel URL (e.g. `https://funny-eel-44.tunnel.gla.ma`).
|
|
57
|
+
|
|
58
|
+
Then in ChatGPT:
|
|
59
|
+
|
|
60
|
+
1. Go to **Settings > Apps > Advanced settings** and enable **Developer mode**
|
|
61
|
+
2. Click **New App**, give it a name, and paste the tunnel URL with `/mcp` appended (e.g. `https://funny-eel-44.tunnel.gla.ma/mcp`)
|
|
62
|
+
3. Set authentication to **No Auth** and click **Create**
|
|
63
|
+
4. In a new chat, select **Developer mode** from the model picker and enable the app
|
|
55
64
|
|
|
56
65
|
See [OpenAI's MCP docs](https://platform.openai.com/docs/mcp) for details.
|
|
57
66
|
|
|
@@ -79,7 +88,7 @@ Edit `.gemini/settings.json` (project-level) or `~/.gemini/settings.json` (globa
|
|
|
79
88
|
Or add via CLI:
|
|
80
89
|
|
|
81
90
|
```bash
|
|
82
|
-
gemini mcp add jotbird
|
|
91
|
+
gemini mcp add jotbird npx -e JOTBIRD_API_KEY=jb_your_key_here -- -y mcp-server-jotbird
|
|
83
92
|
```
|
|
84
93
|
|
|
85
94
|
See [Gemini CLI MCP docs](https://google-gemini.github.io/gemini-cli/docs/tools/mcp-server.html) for details.
|
|
@@ -106,22 +115,24 @@ Ask your LLM things like:
|
|
|
106
115
|
- *"Update my published page 'my-notes' with this new section"*
|
|
107
116
|
- *"Show me all my published pages"*
|
|
108
117
|
- *"Take down the page with slug 'old-draft'"*
|
|
118
|
+
- *"Publish this at my namespace as 'project-notes'"* (Pro)
|
|
109
119
|
|
|
110
120
|
## Tools
|
|
111
121
|
|
|
112
122
|
### `publish`
|
|
113
123
|
|
|
114
|
-
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`.
|
|
115
125
|
|
|
116
126
|
| Parameter | Required | Description |
|
|
117
127
|
|-----------|----------|-------------|
|
|
118
128
|
| `markdown` | Yes | Markdown content (max 256 KB). Supports footnotes, task lists, definition lists, math (`$…$` and `$$…$$`), and inline HTML. |
|
|
119
129
|
| `title` | No | Page title. If omitted, the first H1 in the Markdown is used. |
|
|
120
|
-
| `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. |
|
|
121
132
|
|
|
122
133
|
### `list_documents`
|
|
123
134
|
|
|
124
|
-
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).
|
|
125
136
|
|
|
126
137
|
No parameters.
|
|
127
138
|
|
|
@@ -132,6 +143,16 @@ Permanently delete a published page and its shareable URL. Cannot be undone.
|
|
|
132
143
|
| Parameter | Required | Description |
|
|
133
144
|
|-----------|----------|-------------|
|
|
134
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).
|
|
135
156
|
|
|
136
157
|
## Limits
|
|
137
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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"}
|