notion-mcp-server 1.0.0 → 2.4.2

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.
Files changed (95) hide show
  1. package/README.md +383 -192
  2. package/build/config/index.js +3 -1
  3. package/build/dispatch/concurrency.js +15 -0
  4. package/build/dispatch/idempotency.js +38 -0
  5. package/build/dispatch/index.js +175 -0
  6. package/build/dispatch/rate-limit.js +56 -0
  7. package/build/dispatch/retry.js +97 -0
  8. package/build/index.js +1 -1
  9. package/build/markdown/parse.js +265 -0
  10. package/build/operations/blocks.js +331 -0
  11. package/build/operations/comments.js +191 -0
  12. package/build/operations/data-sources.js +85 -0
  13. package/build/operations/databases.js +345 -0
  14. package/build/operations/files.js +239 -0
  15. package/build/operations/index.js +19 -0
  16. package/build/operations/pages.js +486 -0
  17. package/build/operations/registry.js +16 -0
  18. package/build/operations/users.js +101 -0
  19. package/build/prompts/index.js +105 -0
  20. package/build/schema/blocks.js +19 -77
  21. package/build/schema/database.js +27 -86
  22. package/build/schema/emit.js +68 -0
  23. package/build/schema/file.js +1 -1
  24. package/build/schema/filter-dsl.js +333 -0
  25. package/build/schema/icon.js +1 -1
  26. package/build/schema/page-properties.js +17 -3
  27. package/build/schema/page.js +12 -88
  28. package/build/schema/refs.js +16 -0
  29. package/build/schema/rich-text.js +1 -1
  30. package/build/server/index.js +15 -2
  31. package/build/services/auth.js +19 -0
  32. package/build/services/notion.js +14 -17
  33. package/build/tools/index.js +119 -51
  34. package/build/utils/error.js +125 -86
  35. package/build/utils/handler.js +11 -0
  36. package/build/utils/learning-error.js +40 -0
  37. package/build/utils/notion-types.js +16 -0
  38. package/build/utils/paginate.js +35 -0
  39. package/build/utils/schema-slice.js +156 -0
  40. package/build/utils/slim.js +269 -0
  41. package/package.json +13 -7
  42. package/build/resources/imageList.js +0 -62
  43. package/build/resources/index.js +0 -1
  44. package/build/resources/predictionList.js +0 -43
  45. package/build/resources/svgList.js +0 -69
  46. package/build/schema/comments.js +0 -34
  47. package/build/schema/notion.js +0 -57
  48. package/build/schema/richText.js +0 -757
  49. package/build/schema/tools.js +0 -17
  50. package/build/schema/users.js +0 -13
  51. package/build/services/replicate.js +0 -23
  52. package/build/tools/appendBlockChildren.js +0 -25
  53. package/build/tools/batchAppendBlockChildren.js +0 -33
  54. package/build/tools/batchDeleteBlocks.js +0 -32
  55. package/build/tools/batchMixedOperations.js +0 -58
  56. package/build/tools/batchUpdateBlocks.js +0 -33
  57. package/build/tools/comments.js +0 -62
  58. package/build/tools/createDatabase.js +0 -18
  59. package/build/tools/createPage.js +0 -18
  60. package/build/tools/createPrediction.js +0 -28
  61. package/build/tools/deleteBlock.js +0 -24
  62. package/build/tools/formatRichText.js +0 -83
  63. package/build/tools/generateImage.js +0 -48
  64. package/build/tools/generateImageVariants.js +0 -105
  65. package/build/tools/generateMultipleImages.js +0 -60
  66. package/build/tools/generateSVG.js +0 -43
  67. package/build/tools/getPrediction.js +0 -22
  68. package/build/tools/predictionList.js +0 -30
  69. package/build/tools/queryDatabase.js +0 -22
  70. package/build/tools/retrieveBlock.js +0 -24
  71. package/build/tools/retrieveBlockChildren.js +0 -32
  72. package/build/tools/searchPage.js +0 -24
  73. package/build/tools/updateBlock.js +0 -25
  74. package/build/tools/updateDatabase.js +0 -18
  75. package/build/tools/updatePage.js +0 -40
  76. package/build/tools/updatePageProperties.js +0 -21
  77. package/build/tools/users.js +0 -62
  78. package/build/types/blocks.js +0 -11
  79. package/build/types/comments.js +0 -6
  80. package/build/types/database.js +0 -5
  81. package/build/types/notion.js +0 -1
  82. package/build/types/page.js +0 -7
  83. package/build/types/richText.js +0 -1
  84. package/build/types/tools.js +0 -1
  85. package/build/types/users.js +0 -5
  86. package/build/utils/blob.js +0 -5
  87. package/build/utils/image.js +0 -34
  88. package/build/utils/index.js +0 -1
  89. package/build/utils/richText.js +0 -174
  90. package/build/validation/blocks.js +0 -568
  91. package/build/validation/notion.js +0 -51
  92. package/build/validation/page.js +0 -262
  93. package/build/validation/richText.js +0 -744
  94. package/build/validation/tools.js +0 -16
  95. /package/build/{types/index.js → operations/types.js} +0 -0
@@ -1,568 +0,0 @@
1
- import { z } from "zod";
2
- import { richTextSchema } from "./richText.js";
3
- // Define children array type using a schema reference
4
- // It will be properly populated once blockSchema is defined
5
- const childrenSchema = z.array(z.lazy(() => blockSchema)).optional();
6
- // Define color schema based on Notion API types
7
- const colorSchema = z
8
- .enum([
9
- "default",
10
- "gray",
11
- "brown",
12
- "orange",
13
- "yellow",
14
- "green",
15
- "blue",
16
- "purple",
17
- "pink",
18
- "red",
19
- "gray_background",
20
- "brown_background",
21
- "orange_background",
22
- "yellow_background",
23
- "green_background",
24
- "blue_background",
25
- "purple_background",
26
- "pink_background",
27
- "red_background",
28
- ])
29
- .optional();
30
- // Common fields for all blocks
31
- const blockBaseSchema = z.object({
32
- object: z.literal("block"),
33
- id: z.string(),
34
- parent: z.object({
35
- type: z.enum(["page_id", "database_id", "block_id", "workspace"]),
36
- page_id: z.string().optional(),
37
- database_id: z.string().optional(),
38
- block_id: z.string().optional(),
39
- workspace: z.boolean().optional(),
40
- }),
41
- type: z.string(),
42
- created_time: z.string(),
43
- created_by: z.object({
44
- object: z.literal("user"),
45
- id: z.string(),
46
- }),
47
- last_edited_time: z.string(),
48
- last_edited_by: z.object({
49
- object: z.literal("user"),
50
- id: z.string(),
51
- }),
52
- has_children: z.boolean(),
53
- archived: z.boolean(),
54
- });
55
- // ----- Block type specific schemas -----
56
- // Paragraph block
57
- export const paragraphBlockSchema = blockBaseSchema.extend({
58
- type: z.literal("paragraph"),
59
- paragraph: z.object({
60
- rich_text: richTextSchema,
61
- color: colorSchema,
62
- children: childrenSchema,
63
- }),
64
- });
65
- // Heading blocks
66
- export const heading1BlockSchema = blockBaseSchema.extend({
67
- type: z.literal("heading_1"),
68
- heading_1: z.object({
69
- rich_text: richTextSchema,
70
- color: colorSchema,
71
- is_toggleable: z.boolean(),
72
- children: childrenSchema,
73
- }),
74
- });
75
- export const heading2BlockSchema = blockBaseSchema.extend({
76
- type: z.literal("heading_2"),
77
- heading_2: z.object({
78
- rich_text: richTextSchema,
79
- color: colorSchema,
80
- is_toggleable: z.boolean(),
81
- children: childrenSchema,
82
- }),
83
- });
84
- export const heading3BlockSchema = blockBaseSchema.extend({
85
- type: z.literal("heading_3"),
86
- heading_3: z.object({
87
- rich_text: richTextSchema,
88
- color: colorSchema,
89
- is_toggleable: z.boolean(),
90
- children: childrenSchema,
91
- }),
92
- });
93
- // Bulleted list item
94
- export const bulletedListItemBlockSchema = blockBaseSchema.extend({
95
- type: z.literal("bulleted_list_item"),
96
- bulleted_list_item: z.object({
97
- rich_text: richTextSchema,
98
- color: colorSchema,
99
- children: childrenSchema,
100
- }),
101
- });
102
- // Numbered list item
103
- export const numberedListItemBlockSchema = blockBaseSchema.extend({
104
- type: z.literal("numbered_list_item"),
105
- numbered_list_item: z.object({
106
- rich_text: richTextSchema,
107
- color: colorSchema,
108
- children: childrenSchema,
109
- }),
110
- });
111
- // To-do block
112
- export const todoBlockSchema = blockBaseSchema.extend({
113
- type: z.literal("to_do"),
114
- to_do: z.object({
115
- rich_text: richTextSchema,
116
- color: colorSchema,
117
- checked: z.boolean(),
118
- children: childrenSchema,
119
- }),
120
- });
121
- // Toggle block
122
- export const toggleBlockSchema = blockBaseSchema.extend({
123
- type: z.literal("toggle"),
124
- toggle: z.object({
125
- rich_text: richTextSchema,
126
- color: colorSchema,
127
- children: childrenSchema,
128
- }),
129
- });
130
- // Code block
131
- export const codeBlockSchema = blockBaseSchema.extend({
132
- type: z.literal("code"),
133
- code: z.object({
134
- rich_text: richTextSchema,
135
- caption: richTextSchema.optional(),
136
- language: z.enum([
137
- "abap",
138
- "arduino",
139
- "bash",
140
- "basic",
141
- "c",
142
- "clojure",
143
- "coffeescript",
144
- "c++",
145
- "c#",
146
- "css",
147
- "dart",
148
- "diff",
149
- "docker",
150
- "elixir",
151
- "elm",
152
- "erlang",
153
- "flow",
154
- "fortran",
155
- "f#",
156
- "gherkin",
157
- "glsl",
158
- "go",
159
- "graphql",
160
- "groovy",
161
- "haskell",
162
- "html",
163
- "java",
164
- "javascript",
165
- "json",
166
- "julia",
167
- "kotlin",
168
- "latex",
169
- "less",
170
- "lisp",
171
- "livescript",
172
- "lua",
173
- "makefile",
174
- "markdown",
175
- "markup",
176
- "matlab",
177
- "mermaid",
178
- "nix",
179
- "objective-c",
180
- "ocaml",
181
- "pascal",
182
- "perl",
183
- "php",
184
- "plain text",
185
- "powershell",
186
- "prolog",
187
- "protobuf",
188
- "python",
189
- "r",
190
- "reason",
191
- "ruby",
192
- "rust",
193
- "sass",
194
- "scala",
195
- "scheme",
196
- "scss",
197
- "shell",
198
- "sql",
199
- "swift",
200
- "typescript",
201
- "vb.net",
202
- "verilog",
203
- "vhdl",
204
- "visual basic",
205
- "webassembly",
206
- "xml",
207
- "yaml",
208
- "java/c/c++/c#",
209
- ]),
210
- }),
211
- });
212
- // Child page block
213
- export const childPageBlockSchema = blockBaseSchema.extend({
214
- type: z.literal("child_page"),
215
- child_page: z.object({
216
- title: z.string(),
217
- children: childrenSchema,
218
- }),
219
- });
220
- // Child database block
221
- export const childDatabaseBlockSchema = blockBaseSchema.extend({
222
- type: z.literal("child_database"),
223
- child_database: z.object({
224
- title: z.string(),
225
- children: childrenSchema,
226
- }),
227
- });
228
- // Embed block
229
- export const embedBlockSchema = blockBaseSchema.extend({
230
- type: z.literal("embed"),
231
- embed: z.object({
232
- url: z.string().url(),
233
- caption: richTextSchema,
234
- }),
235
- });
236
- // Image block
237
- export const imageBlockSchema = blockBaseSchema.extend({
238
- type: z.literal("image"),
239
- image: z.object({
240
- caption: richTextSchema.optional(),
241
- type: z.enum(["external", "file"]),
242
- external: z.object({ url: z.string().url() }).optional(),
243
- file: z
244
- .object({ url: z.string(), expiry_time: z.string().optional() })
245
- .optional(),
246
- }),
247
- });
248
- // Video block
249
- export const videoBlockSchema = blockBaseSchema.extend({
250
- type: z.literal("video"),
251
- video: z.object({
252
- caption: richTextSchema.optional(),
253
- type: z.enum(["external", "file"]),
254
- external: z.object({ url: z.string().url() }).optional(),
255
- file: z
256
- .object({ url: z.string(), expiry_time: z.string().optional() })
257
- .optional(),
258
- }),
259
- });
260
- // File block
261
- export const fileBlockSchema = blockBaseSchema.extend({
262
- type: z.literal("file"),
263
- file: z.object({
264
- caption: richTextSchema.optional(),
265
- type: z.enum(["external", "file"]),
266
- external: z.object({ url: z.string().url() }).optional(),
267
- file: z
268
- .object({ url: z.string(), expiry_time: z.string().optional() })
269
- .optional(),
270
- }),
271
- });
272
- // PDF block
273
- export const pdfBlockSchema = blockBaseSchema.extend({
274
- type: z.literal("pdf"),
275
- pdf: z.object({
276
- caption: richTextSchema.optional(),
277
- type: z.enum(["external", "file"]),
278
- external: z.object({ url: z.string().url() }).optional(),
279
- file: z
280
- .object({ url: z.string(), expiry_time: z.string().optional() })
281
- .optional(),
282
- }),
283
- });
284
- // Bookmark block
285
- export const bookmarkBlockSchema = blockBaseSchema.extend({
286
- type: z.literal("bookmark"),
287
- bookmark: z.object({
288
- url: z.string().url(),
289
- caption: richTextSchema.optional(),
290
- }),
291
- });
292
- // Emoji schema
293
- export const emojiSchema = z.enum([
294
- "😀",
295
- "😃",
296
- "😄",
297
- "😁",
298
- "😆",
299
- "😅",
300
- "🤣",
301
- "😂",
302
- "🙂",
303
- "🙃",
304
- "🫠",
305
- "😉",
306
- "😊",
307
- "😇",
308
- "🥰",
309
- "😍",
310
- "🤩",
311
- "😘",
312
- "😗",
313
- "☺️",
314
- "☺",
315
- "😚",
316
- "😙",
317
- "🥲",
318
- "😋",
319
- "😛",
320
- "😜",
321
- "🤪",
322
- "😝",
323
- "🤑",
324
- "🤗",
325
- "🤭",
326
- "🫢",
327
- "🫣",
328
- "🤫",
329
- "🤔",
330
- "🫡",
331
- "🤐",
332
- "🤨",
333
- "😐",
334
- "😑",
335
- "😶",
336
- "🫥",
337
- "😶‍🌫️",
338
- "😶‍🌫",
339
- "😏",
340
- "😒",
341
- "🙄",
342
- "😬",
343
- "😮‍💨",
344
- "🤥",
345
- "😌",
346
- "😔",
347
- "😪",
348
- "🤤",
349
- "😴",
350
- "😷",
351
- "🤒",
352
- "🤕",
353
- "🤢",
354
- "🤮",
355
- "🤧",
356
- "🥵",
357
- "🥶",
358
- "🥴",
359
- "😵",
360
- "😵‍💫",
361
- "🤯",
362
- "🤠",
363
- "🥳",
364
- "🥸",
365
- "😎",
366
- "🤓",
367
- "🧐",
368
- "😕",
369
- "🫤",
370
- "😟",
371
- "🙁",
372
- "☹️",
373
- "☹",
374
- "😮",
375
- "😯",
376
- "😲",
377
- "😳",
378
- "🥺",
379
- "🥹",
380
- "😦",
381
- "😧",
382
- "😨",
383
- "😰",
384
- "😥",
385
- "😢",
386
- "😭",
387
- "😱",
388
- "😖",
389
- "😣",
390
- "😞",
391
- "😓",
392
- "😩",
393
- "😫",
394
- "🥱",
395
- "😤",
396
- "😡",
397
- "😠",
398
- "🤬",
399
- "😈",
400
- "👿",
401
- "💀",
402
- "☠️",
403
- "☠",
404
- "💩",
405
- "🤡",
406
- "👹",
407
- "👺",
408
- "👻",
409
- "👽",
410
- "👾",
411
- "🤖",
412
- "😺",
413
- "😸",
414
- "😹",
415
- "😻",
416
- "😼",
417
- "😽",
418
- "🙀",
419
- "😿",
420
- "😾",
421
- "🙈",
422
- "🙉",
423
- "🙊",
424
- ]);
425
- // Callout block
426
- export const calloutBlockSchema = blockBaseSchema.extend({
427
- type: z.literal("callout"),
428
- callout: z.object({
429
- rich_text: richTextSchema,
430
- icon: z.union([
431
- z.object({ type: z.literal("emoji"), emoji: emojiSchema }),
432
- z.object({
433
- type: z.literal("external"),
434
- external: z.object({ url: z.string().url() }),
435
- }),
436
- z.object({
437
- type: z.literal("file"),
438
- file: z.object({ url: z.string(), expiry_time: z.string().optional() }),
439
- }),
440
- z.any(),
441
- ]),
442
- color: colorSchema,
443
- children: childrenSchema,
444
- }),
445
- });
446
- // Quote block
447
- export const quoteBlockSchema = blockBaseSchema.extend({
448
- type: z.literal("quote"),
449
- quote: z.object({
450
- rich_text: richTextSchema,
451
- color: colorSchema,
452
- children: childrenSchema,
453
- }),
454
- });
455
- // Divider block
456
- export const dividerBlockSchema = blockBaseSchema.extend({
457
- type: z.literal("divider"),
458
- divider: z.object({}),
459
- });
460
- // Table of contents block
461
- export const tableOfContentsBlockSchema = blockBaseSchema.extend({
462
- type: z.literal("table_of_contents"),
463
- table_of_contents: z.object({
464
- color: colorSchema,
465
- }),
466
- });
467
- // Breadcrumb block
468
- export const breadcrumbBlockSchema = blockBaseSchema.extend({
469
- type: z.literal("breadcrumb"),
470
- breadcrumb: z.object({}),
471
- });
472
- // Column list and Column blocks
473
- export const columnBlockSchema = blockBaseSchema.extend({
474
- type: z.literal("column"),
475
- column: z.object({
476
- children: childrenSchema,
477
- }),
478
- });
479
- export const columnListBlockSchema = blockBaseSchema.extend({
480
- type: z.literal("column_list"),
481
- column_list: z.object({
482
- children: z.array(columnBlockSchema),
483
- }),
484
- });
485
- // Link preview block
486
- export const linkPreviewBlockSchema = blockBaseSchema.extend({
487
- type: z.literal("link_preview"),
488
- link_preview: z.object({
489
- url: z.string().url(),
490
- }),
491
- });
492
- // Template block
493
- export const templateBlockSchema = blockBaseSchema.extend({
494
- type: z.literal("template"),
495
- template: z.object({
496
- rich_text: richTextSchema,
497
- children: childrenSchema,
498
- }),
499
- });
500
- // Synced block
501
- export const syncedBlockSchema = blockBaseSchema.extend({
502
- type: z.literal("synced_block"),
503
- synced_block: z.object({
504
- synced_from: z
505
- .object({
506
- type: z.literal("block_id"),
507
- block_id: z.string(),
508
- })
509
- .optional(),
510
- children: childrenSchema,
511
- }),
512
- });
513
- // Table block and row
514
- export const tableRowBlockSchema = blockBaseSchema.extend({
515
- type: z.literal("table_row"),
516
- table_row: z.object({
517
- cells: z.array(richTextSchema),
518
- }),
519
- });
520
- export const tableBlockSchema = blockBaseSchema.extend({
521
- type: z.literal("table"),
522
- table: z.object({
523
- table_width: z.number(),
524
- has_column_header: z.boolean().optional(),
525
- has_row_header: z.boolean().optional(),
526
- children: z.array(tableRowBlockSchema),
527
- }),
528
- });
529
- // Equation block
530
- export const equationBlockSchema = blockBaseSchema.extend({
531
- type: z.literal("equation"),
532
- equation: z.object({
533
- expression: z.string(),
534
- }),
535
- });
536
- // The comprehensive block schema that combines all block types
537
- export const blockSchema = z.discriminatedUnion("type", [
538
- paragraphBlockSchema,
539
- heading1BlockSchema,
540
- heading2BlockSchema,
541
- heading3BlockSchema,
542
- bulletedListItemBlockSchema,
543
- numberedListItemBlockSchema,
544
- todoBlockSchema,
545
- toggleBlockSchema,
546
- codeBlockSchema,
547
- childPageBlockSchema,
548
- childDatabaseBlockSchema,
549
- embedBlockSchema,
550
- imageBlockSchema,
551
- videoBlockSchema,
552
- fileBlockSchema,
553
- pdfBlockSchema,
554
- bookmarkBlockSchema,
555
- calloutBlockSchema,
556
- quoteBlockSchema,
557
- dividerBlockSchema,
558
- tableOfContentsBlockSchema,
559
- breadcrumbBlockSchema,
560
- columnBlockSchema,
561
- columnListBlockSchema,
562
- linkPreviewBlockSchema,
563
- templateBlockSchema,
564
- syncedBlockSchema,
565
- tableBlockSchema,
566
- tableRowBlockSchema,
567
- equationBlockSchema,
568
- ]);
@@ -1,51 +0,0 @@
1
- import { z } from "zod";
2
- import { richTextSchema } from "./richText.js";
3
- export const parentSchema = z
4
- .object({
5
- type: z.enum(["page_id", "database_id"]),
6
- page_id: z.string().optional(),
7
- database_id: z.string().optional(),
8
- })
9
- .refine((data) => {
10
- if (data.type === "page_id" && !data.page_id)
11
- return false;
12
- if (data.type === "database_id" && !data.database_id)
13
- return false;
14
- return true;
15
- }, {
16
- message: "page_id must be provided when type is page_id, database_id must be provided when type is database_id",
17
- });
18
- export const pageParentPropertiesSchema = z.object({
19
- title: z.object({
20
- title: richTextSchema,
21
- }),
22
- });
23
- export const databaseParentPropertiesSchema = z.record(z.string(), z.union([
24
- z.object({ title: richTextSchema }),
25
- z.object({ rich_text: richTextSchema }),
26
- z.object({ number: z.number().optional().nullable() }),
27
- z.object({ select: z.object({ name: z.string() }).optional().nullable() }),
28
- z.object({
29
- multi_select: z.array(z.object({ name: z.string() })).optional(),
30
- }),
31
- z.object({
32
- date: z
33
- .object({
34
- start: z.string(),
35
- end: z.string().optional(),
36
- time_zone: z.string().optional(),
37
- })
38
- .optional()
39
- .nullable(),
40
- }),
41
- z.object({ checkbox: z.boolean().optional() }),
42
- z.object({ url: z.string().url().optional().nullable() }),
43
- z.object({ email: z.string().email().optional().nullable() }),
44
- z.object({ phone_number: z.string().optional().nullable() }),
45
- ]));
46
- export const blockSchema = z
47
- .object({
48
- object: z.literal("block"),
49
- type: z.string(),
50
- })
51
- .and(z.record(z.string(), z.any()));