@notionhq/notion-mcp-server 1.3.0 → 1.5.0

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
@@ -4,11 +4,24 @@
4
4
 
5
5
  This project implements an [MCP server](https://spec.modelcontextprotocol.io/) for the [Notion API](https://developers.notion.com/reference/intro).
6
6
 
7
- ![mcp-demo](https://github.com/user-attachments/assets/1f82cd82-87e4-4d7c-8b72-486ef1f18663)
7
+ ![mcp-demo](https://github.com/user-attachments/assets/e3ff90a7-7801-48a9-b807-f7dd47f0d3d6)
8
8
 
9
9
  ### Installation
10
10
 
11
- Add the following to your `.cursor/mcp.json` or `claude_desktop_config.json` (MacOS: `~/Library/Application\ Support/Claude/claude_desktop_config.json`)
11
+ #### 1. Setting up Integration in Notion:
12
+ Go to [https://www.notion.so/profile/integrations](https://www.notion.so/profile/integrations) and create a new **internal** integration or select an existing one.
13
+
14
+ ![Creating a Notion Integration token](docs/images/integrations-creation.png)
15
+
16
+ While we limit the scope of Notion API's exposed (for example, you will not be able to delete databases via MCP), there is a non-zero risk to workspace data by exposing it to LLMs. Security-conscious users may want to further configure the Integration's _Capabilities_.
17
+
18
+ For example, you can create a read-only integration token by giving only "Read content" access from the "Configuration" tab:
19
+
20
+ ![Notion Integration Token Capabilities showing Read content checked](docs/images/integrations-capabilities.png)
21
+
22
+ #### 2. Adding MCP config to your client:
23
+
24
+ Add the following to your `.cursor/mcp.json` or `claude_desktop_config.json` (MacOS: `~/Library/Application\ Support/Claude/claude_desktop_config.json`)
12
25
 
13
26
  ```javascript
14
27
  {
@@ -25,10 +38,16 @@ Add the following to your `.cursor/mcp.json` or `claude_desktop_config.json` (Ma
25
38
  ```
26
39
 
27
40
  Don't forget to replace `ntn_****` with your integration secret. Find it from your integration configuration tab:
28
- <img width="918" alt="retrieve-token" src="https://github.com/user-attachments/assets/67b44536-5333-49fa-809c-59581bf5370a" />
29
41
 
42
+ ![Copying your Integration token from the Configuration tab in the developer portal](https://github.com/user-attachments/assets/67b44536-5333-49fa-809c-59581bf5370a)
43
+
44
+ #### 3. Connecting content to integration:
30
45
  Ensure relevant pages and databases are connected to your integration.
31
46
 
47
+ To do this, you'll need to visit that page, and click on the 3 dots, and select "Connect to integration".
48
+
49
+ ![Adding Integration Token to Notion Connections](docs/images/connections.png)
50
+
32
51
  ### Examples
33
52
 
34
53
  1. Using the following instruction
Binary file
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "mcp",
7
7
  "server"
8
8
  ],
9
- "version": "1.3.0",
9
+ "version": "1.5.0",
10
10
  "license": "MIT",
11
11
  "type": "module",
12
12
  "scripts": {
@@ -248,9 +248,552 @@
248
248
  "type": "object",
249
249
  "properties": {
250
250
  "filter": {
251
- "type": "string",
251
+ "type": "object",
252
252
  "description": "When supplied, limits which pages are returned based on the [filter conditions](ref:post-database-query-filter).",
253
- "format": "json"
253
+ "or": {
254
+ "type": "array",
255
+ "items": {
256
+ "type": "object",
257
+ "properties": {
258
+ "type": "object",
259
+ "properties": {
260
+ "property": {
261
+ "type": "string"
262
+ },
263
+ "title": {
264
+ "type": "object",
265
+ "properties": {
266
+ "equals": {
267
+ "type": "string"
268
+ },
269
+ "does_not_equal": {
270
+ "type": "string"
271
+ },
272
+ "contains": {
273
+ "type": "string"
274
+ },
275
+ "does_not_contain": {
276
+ "type": "string"
277
+ },
278
+ "starts_with": {
279
+ "type": "string"
280
+ },
281
+ "ends_with": {
282
+ "type": "string"
283
+ }
284
+ }
285
+ },
286
+ "rich_text": {
287
+ "type": "object",
288
+ "properties": {
289
+ "equals": {
290
+ "type": "string"
291
+ },
292
+ "does_not_equal": {
293
+ "type": "string"
294
+ },
295
+ "contains": {
296
+ "type": "string"
297
+ },
298
+ "does_not_contain": {
299
+ "type": "string"
300
+ },
301
+ "starts_with": {
302
+ "type": "string"
303
+ },
304
+ "ends_with": {
305
+ "type": "string"
306
+ }
307
+ }
308
+ },
309
+ "url": {
310
+ "type": "object",
311
+ "properties": {
312
+ "equals": {
313
+ "type": "string"
314
+ },
315
+ "does_not_equal": {
316
+ "type": "string"
317
+ },
318
+ "contains": {
319
+ "type": "string"
320
+ },
321
+ "does_not_contain": {
322
+ "type": "string"
323
+ },
324
+ "starts_with": {
325
+ "type": "string"
326
+ },
327
+ "ends_with": {
328
+ "type": "string"
329
+ }
330
+ }
331
+ },
332
+ "email": {
333
+ "type": "object",
334
+ "properties": {
335
+ "equals": {
336
+ "type": "string"
337
+ },
338
+ "does_not_equal": {
339
+ "type": "string"
340
+ },
341
+ "contains": {
342
+ "type": "string"
343
+ },
344
+ "does_not_contain": {
345
+ "type": "string"
346
+ },
347
+ "starts_with": {
348
+ "type": "string"
349
+ },
350
+ "ends_with": {
351
+ "type": "string"
352
+ }
353
+ }
354
+ },
355
+ "phone_number": {
356
+ "type": "object",
357
+ "properties": {
358
+ "equals": {
359
+ "type": "string"
360
+ },
361
+ "does_not_equal": {
362
+ "type": "string"
363
+ },
364
+ "contains": {
365
+ "type": "string"
366
+ },
367
+ "does_not_contain": {
368
+ "type": "string"
369
+ },
370
+ "starts_with": {
371
+ "type": "string"
372
+ },
373
+ "ends_with": {
374
+ "type": "string"
375
+ }
376
+ }
377
+ },
378
+ "number": {
379
+ "type": "object",
380
+ "properties": {
381
+ "equals": {
382
+ "type": "number"
383
+ },
384
+ "does_not_equal": {
385
+ "type": "number"
386
+ },
387
+ "contains": {
388
+ "type": "number"
389
+ },
390
+ "does_not_contain": {
391
+ "type": "number"
392
+ },
393
+ "starts_with": {
394
+ "type": "number"
395
+ },
396
+ "ends_with": {
397
+ "type": "number"
398
+ }
399
+ }
400
+ },
401
+ "checkbox": {
402
+ "type": "object",
403
+ "properties": {
404
+ "equals": {
405
+ "type": "boolean"
406
+ },
407
+ "does_not_equal": {
408
+ "type": "boolean"
409
+ }
410
+ }
411
+ },
412
+ "select": {
413
+ "type": "object",
414
+ "properties": {
415
+ "equals": {
416
+ "type": "string"
417
+ },
418
+ "does_not_equal": {
419
+ "type": "string"
420
+ }
421
+ }
422
+ },
423
+ "multi_select": {
424
+ "type": "object",
425
+ "properties": {
426
+ "contains": {
427
+ "type": "string"
428
+ },
429
+ "does_not_contain": {
430
+ "type": "string"
431
+ }
432
+ }
433
+ },
434
+ "status": {
435
+ "type": "object",
436
+ "properties": {
437
+ "equals": {
438
+ "type": "string"
439
+ },
440
+ "does_not_equal": {
441
+ "type": "string"
442
+ }
443
+ }
444
+ },
445
+ "date": {
446
+ "type": "object",
447
+ "properties": {
448
+ "equals": {
449
+ "type": "string",
450
+ "format": "date"
451
+ },
452
+ "before": {
453
+ "type": "string",
454
+ "format": "date"
455
+ },
456
+ "after": {
457
+ "type": "string",
458
+ "format": "date"
459
+ },
460
+ "on_or_before": {
461
+ "type": "string",
462
+ "format": "date"
463
+ },
464
+ "on_or_after": {
465
+ "type": "string",
466
+ "format": "date"
467
+ }
468
+ }
469
+ },
470
+ "created_time": {
471
+ "type": "object",
472
+ "properties": {
473
+ "equals": {
474
+ "type": "string",
475
+ "format": "date"
476
+ },
477
+ "before": {
478
+ "type": "string",
479
+ "format": "date"
480
+ },
481
+ "after": {
482
+ "type": "string",
483
+ "format": "date"
484
+ },
485
+ "on_or_before": {
486
+ "type": "string",
487
+ "format": "date"
488
+ },
489
+ "on_or_after": {
490
+ "type": "string",
491
+ "format": "date"
492
+ }
493
+ }
494
+ },
495
+ "last_edited_time": {
496
+ "type": "object",
497
+ "properties": {
498
+ "equals": {
499
+ "type": "string",
500
+ "format": "date"
501
+ },
502
+ "before": {
503
+ "type": "string",
504
+ "format": "date"
505
+ },
506
+ "after": {
507
+ "type": "string",
508
+ "format": "date"
509
+ },
510
+ "on_or_before": {
511
+ "type": "string",
512
+ "format": "date"
513
+ },
514
+ "on_or_after": {
515
+ "type": "string",
516
+ "format": "date"
517
+ }
518
+ }
519
+ }
520
+ }
521
+ }
522
+ },
523
+ "maxItems": 100
524
+ },
525
+ "and": {
526
+ "type": "array",
527
+ "items": {
528
+ "type": "object",
529
+ "properties": {
530
+ "type": "object",
531
+ "properties": {
532
+ "property": {
533
+ "type": "string"
534
+ },
535
+ "title": {
536
+ "type": "object",
537
+ "properties": {
538
+ "equals": {
539
+ "type": "string"
540
+ },
541
+ "does_not_equal": {
542
+ "type": "string"
543
+ },
544
+ "contains": {
545
+ "type": "string"
546
+ },
547
+ "does_not_contain": {
548
+ "type": "string"
549
+ },
550
+ "starts_with": {
551
+ "type": "string"
552
+ },
553
+ "ends_with": {
554
+ "type": "string"
555
+ }
556
+ }
557
+ },
558
+ "rich_text": {
559
+ "type": "object",
560
+ "properties": {
561
+ "equals": {
562
+ "type": "string"
563
+ },
564
+ "does_not_equal": {
565
+ "type": "string"
566
+ },
567
+ "contains": {
568
+ "type": "string"
569
+ },
570
+ "does_not_contain": {
571
+ "type": "string"
572
+ },
573
+ "starts_with": {
574
+ "type": "string"
575
+ },
576
+ "ends_with": {
577
+ "type": "string"
578
+ }
579
+ }
580
+ },
581
+ "url": {
582
+ "type": "object",
583
+ "properties": {
584
+ "equals": {
585
+ "type": "string"
586
+ },
587
+ "does_not_equal": {
588
+ "type": "string"
589
+ },
590
+ "contains": {
591
+ "type": "string"
592
+ },
593
+ "does_not_contain": {
594
+ "type": "string"
595
+ },
596
+ "starts_with": {
597
+ "type": "string"
598
+ },
599
+ "ends_with": {
600
+ "type": "string"
601
+ }
602
+ }
603
+ },
604
+ "email": {
605
+ "type": "object",
606
+ "properties": {
607
+ "equals": {
608
+ "type": "string"
609
+ },
610
+ "does_not_equal": {
611
+ "type": "string"
612
+ },
613
+ "contains": {
614
+ "type": "string"
615
+ },
616
+ "does_not_contain": {
617
+ "type": "string"
618
+ },
619
+ "starts_with": {
620
+ "type": "string"
621
+ },
622
+ "ends_with": {
623
+ "type": "string"
624
+ }
625
+ }
626
+ },
627
+ "phone_number": {
628
+ "type": "object",
629
+ "properties": {
630
+ "equals": {
631
+ "type": "string"
632
+ },
633
+ "does_not_equal": {
634
+ "type": "string"
635
+ },
636
+ "contains": {
637
+ "type": "string"
638
+ },
639
+ "does_not_contain": {
640
+ "type": "string"
641
+ },
642
+ "starts_with": {
643
+ "type": "string"
644
+ },
645
+ "ends_with": {
646
+ "type": "string"
647
+ }
648
+ }
649
+ },
650
+ "number": {
651
+ "type": "object",
652
+ "properties": {
653
+ "equals": {
654
+ "type": "number"
655
+ },
656
+ "does_not_equal": {
657
+ "type": "number"
658
+ },
659
+ "contains": {
660
+ "type": "number"
661
+ },
662
+ "does_not_contain": {
663
+ "type": "number"
664
+ },
665
+ "starts_with": {
666
+ "type": "number"
667
+ },
668
+ "ends_with": {
669
+ "type": "number"
670
+ }
671
+ }
672
+ },
673
+ "checkbox": {
674
+ "type": "object",
675
+ "properties": {
676
+ "equals": {
677
+ "type": "boolean"
678
+ },
679
+ "does_not_equal": {
680
+ "type": "boolean"
681
+ }
682
+ }
683
+ },
684
+ "select": {
685
+ "type": "object",
686
+ "properties": {
687
+ "equals": {
688
+ "type": "string"
689
+ },
690
+ "does_not_equal": {
691
+ "type": "string"
692
+ }
693
+ }
694
+ },
695
+ "multi_select": {
696
+ "type": "object",
697
+ "properties": {
698
+ "contains": {
699
+ "type": "string"
700
+ },
701
+ "does_not_contain": {
702
+ "type": "string"
703
+ }
704
+ }
705
+ },
706
+ "status": {
707
+ "type": "object",
708
+ "properties": {
709
+ "equals": {
710
+ "type": "string"
711
+ },
712
+ "does_not_equal": {
713
+ "type": "string"
714
+ }
715
+ }
716
+ },
717
+ "date": {
718
+ "type": "object",
719
+ "properties": {
720
+ "equals": {
721
+ "type": "string",
722
+ "format": "date"
723
+ },
724
+ "before": {
725
+ "type": "string",
726
+ "format": "date"
727
+ },
728
+ "after": {
729
+ "type": "string",
730
+ "format": "date"
731
+ },
732
+ "on_or_before": {
733
+ "type": "string",
734
+ "format": "date"
735
+ },
736
+ "on_or_after": {
737
+ "type": "string",
738
+ "format": "date"
739
+ }
740
+ }
741
+ },
742
+ "created_time": {
743
+ "type": "object",
744
+ "properties": {
745
+ "equals": {
746
+ "type": "string",
747
+ "format": "date"
748
+ },
749
+ "before": {
750
+ "type": "string",
751
+ "format": "date"
752
+ },
753
+ "after": {
754
+ "type": "string",
755
+ "format": "date"
756
+ },
757
+ "on_or_before": {
758
+ "type": "string",
759
+ "format": "date"
760
+ },
761
+ "on_or_after": {
762
+ "type": "string",
763
+ "format": "date"
764
+ }
765
+ }
766
+ },
767
+ "last_edited_time": {
768
+ "type": "object",
769
+ "properties": {
770
+ "equals": {
771
+ "type": "string",
772
+ "format": "date"
773
+ },
774
+ "before": {
775
+ "type": "string",
776
+ "format": "date"
777
+ },
778
+ "after": {
779
+ "type": "string",
780
+ "format": "date"
781
+ },
782
+ "on_or_before": {
783
+ "type": "string",
784
+ "format": "date"
785
+ },
786
+ "on_or_after": {
787
+ "type": "string",
788
+ "format": "date"
789
+ }
790
+ }
791
+ }
792
+ }
793
+ }
794
+ },
795
+ "maxItems": 100
796
+ }
254
797
  },
255
798
  "sorts": {
256
799
  "type": "array",
@@ -276,6 +819,12 @@
276
819
  "type": "integer",
277
820
  "description": "The number of items from the full list desired in the response. Maximum: 100",
278
821
  "default": 100
822
+ },
823
+ "archived": {
824
+ "type": "boolean"
825
+ },
826
+ "in_trash": {
827
+ "type": "boolean"
279
828
  }
280
829
  }
281
830
  }
@@ -561,24 +1110,89 @@
561
1110
  "type": "object",
562
1111
  "properties": {
563
1112
  "properties": {
564
- "type": "string",
565
1113
  "description": "The property values to update for the page. The keys are the names or IDs of the property and the values are property values. If a page property ID is not included, then it is not changed.",
566
- "format": "json"
1114
+ "type": "object",
1115
+ "properties": {
1116
+ "title": {
1117
+ "type": "array",
1118
+ "items": {
1119
+ "type": "object",
1120
+ "properties": {
1121
+ "text": {
1122
+ "type": "object",
1123
+ "properties": {
1124
+ "content": {
1125
+ "type": "string",
1126
+ "maxLength": 2000
1127
+ },
1128
+ "link": {
1129
+ "type": ["object", "null"],
1130
+ "properties": {
1131
+ "url": {
1132
+ "type": "string"
1133
+ }
1134
+ },
1135
+ "required": ["url"]
1136
+ }
1137
+ },
1138
+ "additionalProperties": false,
1139
+ "required": ["content"]
1140
+ },
1141
+ "type": {
1142
+ "enum": ["text"]
1143
+ }
1144
+ },
1145
+ "additionalProperties": false,
1146
+ "required": ["text"]
1147
+ },
1148
+ "maxItems": 100
1149
+ },
1150
+ "type": {
1151
+ "enum": ["title"]
1152
+ }
1153
+ },
1154
+ "additionalProperties": false,
1155
+ "required": ["title"]
567
1156
  },
568
1157
  "in_trash": {
569
1158
  "type": "boolean",
570
1159
  "description": "Set to true to delete a block. Set to false to restore a block.",
571
1160
  "default": false
572
1161
  },
1162
+ "archived": {
1163
+ "type": "boolean"
1164
+ },
573
1165
  "icon": {
574
- "type": "string",
575
1166
  "description": "A page icon for the page. Supported types are [external file object](https://developers.notion.com/reference/file-object) or [emoji object](https://developers.notion.com/reference/emoji-object).",
576
- "format": "json"
1167
+ "type": "object",
1168
+ "properties": {
1169
+ "emoji": {
1170
+ "type": "string"
1171
+ }
1172
+ },
1173
+ "additionalProperties": false,
1174
+ "required": ["emoji"]
577
1175
  },
578
1176
  "cover": {
579
- "type": "string",
1177
+ "type": "object",
580
1178
  "description": "A cover image for the page. Only [external file objects](https://developers.notion.com/reference/file-object) are supported.",
581
- "format": "json"
1179
+ "properties": {
1180
+ "external": {
1181
+ "type": "object",
1182
+ "properties": {
1183
+ "url": {
1184
+ "type": "string"
1185
+ }
1186
+ },
1187
+ "additionalProperties": false,
1188
+ "required": ["url"]
1189
+ },
1190
+ "type": {
1191
+ "enum": ["external"]
1192
+ }
1193
+ },
1194
+ "required": ["external"],
1195
+ "additionalProperties": false
582
1196
  }
583
1197
  }
584
1198
  }