notion-mcp-server 1.0.1 → 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 (99) 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 -138
  21. package/build/schema/database.js +27 -111
  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 -125
  28. package/build/schema/refs.js +16 -0
  29. package/build/schema/rich-text.js +1 -1
  30. package/build/server/index.js +16 -3
  31. package/build/services/auth.js +19 -0
  32. package/build/services/notion.js +14 -17
  33. package/build/tools/index.js +119 -21
  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 -60
  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 -39
  51. package/build/services/loggs.js +0 -13
  52. package/build/services/replicate.js +0 -23
  53. package/build/tools/appendBlockChildren.js +0 -25
  54. package/build/tools/batchAppendBlockChildren.js +0 -33
  55. package/build/tools/batchDeleteBlocks.js +0 -32
  56. package/build/tools/batchMixedOperations.js +0 -58
  57. package/build/tools/batchUpdateBlocks.js +0 -33
  58. package/build/tools/blocks.js +0 -34
  59. package/build/tools/comments.js +0 -81
  60. package/build/tools/createDatabase.js +0 -18
  61. package/build/tools/createPage.js +0 -18
  62. package/build/tools/createPrediction.js +0 -28
  63. package/build/tools/database.js +0 -16
  64. package/build/tools/deleteBlock.js +0 -24
  65. package/build/tools/formatRichText.js +0 -83
  66. package/build/tools/generateImage.js +0 -48
  67. package/build/tools/generateImageVariants.js +0 -105
  68. package/build/tools/generateMultipleImages.js +0 -60
  69. package/build/tools/generateSVG.js +0 -43
  70. package/build/tools/getPrediction.js +0 -22
  71. package/build/tools/pages.js +0 -22
  72. package/build/tools/predictionList.js +0 -30
  73. package/build/tools/queryDatabase.js +0 -22
  74. package/build/tools/retrieveBlock.js +0 -24
  75. package/build/tools/retrieveBlockChildren.js +0 -32
  76. package/build/tools/searchPage.js +0 -24
  77. package/build/tools/updateBlock.js +0 -25
  78. package/build/tools/updateDatabase.js +0 -18
  79. package/build/tools/updatePage.js +0 -40
  80. package/build/tools/updatePageProperties.js +0 -21
  81. package/build/tools/users.js +0 -75
  82. package/build/types/blocks.js +0 -12
  83. package/build/types/comments.js +0 -7
  84. package/build/types/database.js +0 -6
  85. package/build/types/notion.js +0 -1
  86. package/build/types/page.js +0 -8
  87. package/build/types/richText.js +0 -1
  88. package/build/types/tools.js +0 -1
  89. package/build/types/users.js +0 -6
  90. package/build/utils/blob.js +0 -5
  91. package/build/utils/image.js +0 -34
  92. package/build/utils/index.js +0 -1
  93. package/build/utils/richText.js +0 -174
  94. package/build/validation/blocks.js +0 -568
  95. package/build/validation/notion.js +0 -51
  96. package/build/validation/page.js +0 -262
  97. package/build/validation/richText.js +0 -744
  98. package/build/validation/tools.js +0 -16
  99. /package/build/{types/index.js → operations/types.js} +0 -0
@@ -1,262 +0,0 @@
1
- import { z } from "zod";
2
- import { richTextSchema } from "./richText.js";
3
- // Define the parent schema based on Notion API parent object spec
4
- export const parentSchema = z.discriminatedUnion("type", [
5
- z.object({
6
- type: z.literal("database_id"),
7
- database_id: z.string(),
8
- }),
9
- z.object({
10
- type: z.literal("page_id"),
11
- page_id: z.string(),
12
- }),
13
- z.object({
14
- type: z.literal("block_id"),
15
- block_id: z.string(),
16
- }),
17
- z.object({
18
- type: z.literal("workspace"),
19
- workspace: z.boolean(),
20
- }),
21
- ]);
22
- // Define user reference schema
23
- export const userSchema = z.object({
24
- object: z.literal("user"),
25
- id: z.string(),
26
- name: z.string().optional(),
27
- avatar_url: z.string().url().optional().nullable(),
28
- email: z.string().email().optional(),
29
- });
30
- // Define file schema (for icons and covers)
31
- export const fileSchema = z.object({
32
- type: z.enum(["external", "file"]),
33
- external: z
34
- .object({
35
- url: z.string().url(),
36
- })
37
- .optional(),
38
- file: z
39
- .object({
40
- url: z.string().url(),
41
- expiry_time: z.string().optional(),
42
- })
43
- .optional(),
44
- });
45
- // Define emoji schema for icons
46
- export const emojiSchema = z.object({
47
- type: z.literal("emoji"),
48
- emoji: z.string(),
49
- });
50
- // Icon can be a file or an emoji
51
- export const iconSchema = z.union([fileSchema, emojiSchema]);
52
- // Cover is always a file
53
- export const coverSchema = fileSchema;
54
- // Properties schemas
55
- export const pageParentPropertiesSchema = z.object({
56
- title: z.object({
57
- title: richTextSchema,
58
- }),
59
- });
60
- // Define base schema for all property types
61
- export const propertyItemSchema = z.object({
62
- id: z.string(),
63
- type: z.string(),
64
- });
65
- // Title property
66
- export const titlePropertySchema = propertyItemSchema.extend({
67
- type: z.literal("title"),
68
- title: richTextSchema,
69
- });
70
- // Rich text property
71
- export const richTextPropertySchema = propertyItemSchema.extend({
72
- type: z.literal("rich_text"),
73
- rich_text: richTextSchema,
74
- });
75
- // Number property
76
- export const numberPropertySchema = propertyItemSchema.extend({
77
- type: z.literal("number"),
78
- number: z.number().nullable(),
79
- });
80
- // Select property
81
- export const selectOptionSchema = z.object({
82
- id: z.string(),
83
- name: z.string(),
84
- color: z.string(),
85
- });
86
- export const selectPropertySchema = propertyItemSchema.extend({
87
- type: z.literal("select"),
88
- select: selectOptionSchema.nullable(),
89
- });
90
- // Multi-select property
91
- export const multiSelectPropertySchema = propertyItemSchema.extend({
92
- type: z.literal("multi_select"),
93
- multi_select: z.array(selectOptionSchema),
94
- });
95
- // Date property
96
- export const datePropertySchema = propertyItemSchema.extend({
97
- type: z.literal("date"),
98
- date: z
99
- .object({
100
- start: z.string(),
101
- end: z.string().optional().nullable(),
102
- time_zone: z.string().optional().nullable(),
103
- })
104
- .nullable(),
105
- });
106
- // People property
107
- export const peoplePropertySchema = propertyItemSchema.extend({
108
- type: z.literal("people"),
109
- people: z.array(userSchema),
110
- });
111
- // Files property
112
- export const filesPropertySchema = propertyItemSchema.extend({
113
- type: z.literal("files"),
114
- files: z.array(fileSchema),
115
- });
116
- // Checkbox property
117
- export const checkboxPropertySchema = propertyItemSchema.extend({
118
- type: z.literal("checkbox"),
119
- checkbox: z.boolean(),
120
- });
121
- // URL property
122
- export const urlPropertySchema = propertyItemSchema.extend({
123
- type: z.literal("url"),
124
- url: z.string().url().nullable(),
125
- });
126
- // Email property
127
- export const emailPropertySchema = propertyItemSchema.extend({
128
- type: z.literal("email"),
129
- email: z.string().email().nullable(),
130
- });
131
- // Phone number property
132
- export const phoneNumberPropertySchema = propertyItemSchema.extend({
133
- type: z.literal("phone_number"),
134
- phone_number: z.string().nullable(),
135
- });
136
- // Formula property
137
- export const formulaPropertySchema = propertyItemSchema.extend({
138
- type: z.literal("formula"),
139
- formula: z.union([
140
- z.object({ type: z.literal("string"), string: z.string().nullable() }),
141
- z.object({ type: z.literal("number"), number: z.number().nullable() }),
142
- z.object({ type: z.literal("boolean"), boolean: z.boolean().nullable() }),
143
- z.object({
144
- type: z.literal("date"),
145
- date: z
146
- .object({
147
- start: z.string(),
148
- end: z.string().optional().nullable(),
149
- })
150
- .nullable(),
151
- }),
152
- ]),
153
- });
154
- // Relation property
155
- export const relationPropertySchema = propertyItemSchema.extend({
156
- type: z.literal("relation"),
157
- relation: z.array(z.object({ id: z.string() })),
158
- });
159
- // Rollup property
160
- export const rollupPropertySchema = propertyItemSchema.extend({
161
- type: z.literal("rollup"),
162
- rollup: z.union([
163
- z.object({ type: z.literal("number"), number: z.number().nullable() }),
164
- z.object({
165
- type: z.literal("date"),
166
- date: z
167
- .object({
168
- start: z.string(),
169
- end: z.string().optional().nullable(),
170
- })
171
- .nullable(),
172
- }),
173
- z.object({ type: z.literal("array"), array: z.array(z.any()) }),
174
- ]),
175
- });
176
- // Created time property
177
- export const createdTimePropertySchema = propertyItemSchema.extend({
178
- type: z.literal("created_time"),
179
- created_time: z.string(),
180
- });
181
- // Created by property
182
- export const createdByPropertySchema = propertyItemSchema.extend({
183
- type: z.literal("created_by"),
184
- created_by: userSchema,
185
- });
186
- // Last edited time property
187
- export const lastEditedTimePropertySchema = propertyItemSchema.extend({
188
- type: z.literal("last_edited_time"),
189
- last_edited_time: z.string(),
190
- });
191
- // Last edited by property
192
- export const lastEditedByPropertySchema = propertyItemSchema.extend({
193
- type: z.literal("last_edited_by"),
194
- last_edited_by: userSchema,
195
- });
196
- // Status property
197
- export const statusPropertySchema = propertyItemSchema.extend({
198
- type: z.literal("status"),
199
- status: z
200
- .object({
201
- id: z.string(),
202
- name: z.string(),
203
- color: z.string(),
204
- })
205
- .nullable(),
206
- });
207
- // Define the comprehensive property schema that combines all property types
208
- export const propertySchema = z.union([
209
- titlePropertySchema,
210
- richTextPropertySchema,
211
- numberPropertySchema,
212
- selectPropertySchema,
213
- multiSelectPropertySchema,
214
- datePropertySchema,
215
- peoplePropertySchema,
216
- filesPropertySchema,
217
- checkboxPropertySchema,
218
- urlPropertySchema,
219
- emailPropertySchema,
220
- phoneNumberPropertySchema,
221
- formulaPropertySchema,
222
- relationPropertySchema,
223
- rollupPropertySchema,
224
- createdTimePropertySchema,
225
- createdByPropertySchema,
226
- lastEditedTimePropertySchema,
227
- lastEditedByPropertySchema,
228
- statusPropertySchema,
229
- ]);
230
- // Database parent properties can be any of the property types
231
- export const databaseParentPropertiesSchema = z.record(z.string(), z.any() // Using z.any() here because we'd need to define each property value shape
232
- );
233
- // Comprehensive page object schema
234
- export const pageObjectSchema = z.object({
235
- object: z.literal("page"),
236
- id: z.string(),
237
- created_time: z.string(),
238
- created_by: userSchema,
239
- last_edited_time: z.string(),
240
- last_edited_by: userSchema,
241
- archived: z.boolean(),
242
- icon: iconSchema.optional().nullable(),
243
- cover: coverSchema.optional().nullable(),
244
- properties: z.record(z.string(), z.any()),
245
- parent: parentSchema,
246
- url: z.string().url(),
247
- public_url: z.string().url().optional().nullable(),
248
- });
249
- // Schema for creating a new page
250
- // Schema for updating a page
251
- export const updatePageSchema = z.object({
252
- page_id: z.string(),
253
- properties: z.record(z.string(), z.any()).optional(),
254
- icon: z.union([fileSchema, emojiSchema, z.null()]).optional(),
255
- cover: z.union([fileSchema, z.null()]).optional(),
256
- archived: z.boolean().optional(),
257
- });
258
- // Schema for retrieving a page
259
- export const retrievePageSchema = z.object({
260
- page_id: z.string(),
261
- filter_properties: z.array(z.string()).optional(),
262
- });