@atikk-co-jp/notion-mcp-server 0.2.3 → 0.4.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.
Files changed (60) hide show
  1. package/README.ja.md +105 -4
  2. package/README.md +105 -4
  3. package/dist/src/converters/__tests__/markdown-to-blocks.test.d.ts +2 -0
  4. package/dist/src/converters/__tests__/markdown-to-blocks.test.d.ts.map +1 -0
  5. package/dist/src/converters/__tests__/markdown-to-blocks.test.js +245 -0
  6. package/dist/src/converters/index.d.ts +1 -0
  7. package/dist/src/converters/index.d.ts.map +1 -1
  8. package/dist/src/converters/index.js +2 -0
  9. package/dist/src/converters/markdown-to-blocks.d.ts +21 -0
  10. package/dist/src/converters/markdown-to-blocks.d.ts.map +1 -0
  11. package/dist/src/converters/markdown-to-blocks.js +244 -0
  12. package/dist/src/notion-client.d.ts +40 -0
  13. package/dist/src/notion-client.d.ts.map +1 -1
  14. package/dist/src/notion-client.js +39 -0
  15. package/dist/src/tools/append-blocks-simple.d.ts +4 -0
  16. package/dist/src/tools/append-blocks-simple.d.ts.map +1 -0
  17. package/dist/src/tools/append-blocks-simple.js +36 -0
  18. package/dist/src/tools/create-database.d.ts.map +1 -1
  19. package/dist/src/tools/create-database.js +3 -1
  20. package/dist/src/tools/create-page-simple.d.ts +4 -0
  21. package/dist/src/tools/create-page-simple.d.ts.map +1 -0
  22. package/dist/src/tools/create-page-simple.js +54 -0
  23. package/dist/src/tools/delete-block.d.ts +4 -0
  24. package/dist/src/tools/delete-block.d.ts.map +1 -0
  25. package/dist/src/tools/delete-block.js +20 -0
  26. package/dist/src/tools/index.d.ts +14 -1
  27. package/dist/src/tools/index.d.ts.map +1 -1
  28. package/dist/src/tools/index.js +28 -1
  29. package/dist/src/tools/list-comments.d.ts +4 -0
  30. package/dist/src/tools/list-comments.d.ts.map +1 -0
  31. package/dist/src/tools/list-comments.js +50 -0
  32. package/dist/src/tools/list-users.d.ts +4 -0
  33. package/dist/src/tools/list-users.d.ts.map +1 -0
  34. package/dist/src/tools/list-users.js +31 -0
  35. package/dist/src/tools/move-page.d.ts +4 -0
  36. package/dist/src/tools/move-page.d.ts.map +1 -0
  37. package/dist/src/tools/move-page.js +43 -0
  38. package/dist/src/tools/query-database.d.ts.map +1 -1
  39. package/dist/src/tools/retrieve-block.d.ts +4 -0
  40. package/dist/src/tools/retrieve-block.d.ts.map +1 -0
  41. package/dist/src/tools/retrieve-block.js +32 -0
  42. package/dist/src/tools/retrieve-bot-user.d.ts +4 -0
  43. package/dist/src/tools/retrieve-bot-user.d.ts.map +1 -0
  44. package/dist/src/tools/retrieve-bot-user.js +16 -0
  45. package/dist/src/tools/retrieve-database.d.ts +4 -0
  46. package/dist/src/tools/retrieve-database.d.ts.map +1 -0
  47. package/dist/src/tools/retrieve-database.js +58 -0
  48. package/dist/src/tools/retrieve-page-property.d.ts +4 -0
  49. package/dist/src/tools/retrieve-page-property.d.ts.map +1 -0
  50. package/dist/src/tools/retrieve-page-property.js +33 -0
  51. package/dist/src/tools/retrieve-user.d.ts +4 -0
  52. package/dist/src/tools/retrieve-user.d.ts.map +1 -0
  53. package/dist/src/tools/retrieve-user.js +19 -0
  54. package/dist/src/tools/update-block-simple.d.ts +4 -0
  55. package/dist/src/tools/update-block-simple.d.ts.map +1 -0
  56. package/dist/src/tools/update-block-simple.js +68 -0
  57. package/dist/src/tools/update-block.d.ts +4 -0
  58. package/dist/src/tools/update-block.d.ts.map +1 -0
  59. package/dist/src/tools/update-block.js +30 -0
  60. package/package.json +1 -1
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Markdown文字列をNotionブロック配列に変換するモジュール
3
+ */
4
+ // 安全性のための制限値
5
+ const MAX_INPUT_LENGTH = 100_000; // 100KB
6
+ const MAX_LINE_LENGTH = 10_000; // 10KB per line
7
+ const MAX_CODE_BLOCK_LINES = 1000;
8
+ /**
9
+ * インラインMarkdown記法をRichText配列に変換
10
+ * サポート: **bold**, *italic*, ~~strike~~, `code`, [text](url)
11
+ */
12
+ export function parseInlineMarkdown(text) {
13
+ // 行長制限(ReDoS対策)
14
+ const safeText = text.length > MAX_LINE_LENGTH ? text.slice(0, MAX_LINE_LENGTH) : text;
15
+ const result = [];
16
+ // 正規表現パターン(優先順位順)
17
+ const patterns = [
18
+ // リンク: [text](url)
19
+ { regex: /\[([^\]]+)\]\(([^)]+)\)/g, type: 'link' },
20
+ // 太字: **text**
21
+ { regex: /\*\*([^*]+)\*\*/g, type: 'bold' },
22
+ // イタリック: *text* (太字でないもの)
23
+ { regex: /(?<!\*)\*([^*]+)\*(?!\*)/g, type: 'italic' },
24
+ // 取り消し線: ~~text~~
25
+ { regex: /~~([^~]+)~~/g, type: 'strikethrough' },
26
+ // インラインコード: `code`
27
+ { regex: /`([^`]+)`/g, type: 'code' },
28
+ ];
29
+ // 単純な実装: マークダウン記法を順番に処理
30
+ // 複雑なネストは非対応(Notion APIも完全なネストは非対応)
31
+ let lastIndex = 0;
32
+ // 全パターンをまとめて検索
33
+ const allMatches = [];
34
+ for (const { regex, type } of patterns) {
35
+ const re = new RegExp(regex.source, 'g');
36
+ let match = re.exec(safeText);
37
+ while (match !== null) {
38
+ allMatches.push({
39
+ index: match.index,
40
+ length: match[0].length,
41
+ content: match[1],
42
+ type,
43
+ url: type === 'link' ? match[2] : undefined,
44
+ });
45
+ match = re.exec(safeText);
46
+ }
47
+ }
48
+ // インデックス順にソート
49
+ allMatches.sort((a, b) => a.index - b.index);
50
+ // 重複を除去(先に来たものを優先)
51
+ const filteredMatches = [];
52
+ let lastEnd = 0;
53
+ for (const m of allMatches) {
54
+ if (m.index >= lastEnd) {
55
+ filteredMatches.push(m);
56
+ lastEnd = m.index + m.length;
57
+ }
58
+ }
59
+ // RichText配列を構築
60
+ lastIndex = 0;
61
+ for (const match of filteredMatches) {
62
+ // マッチ前のプレーンテキスト
63
+ if (match.index > lastIndex) {
64
+ const plainText = safeText.slice(lastIndex, match.index);
65
+ if (plainText) {
66
+ result.push({
67
+ type: 'text',
68
+ text: { content: plainText },
69
+ });
70
+ }
71
+ }
72
+ // マッチしたテキスト
73
+ const richText = {
74
+ type: 'text',
75
+ text: { content: match.content },
76
+ annotations: {},
77
+ };
78
+ switch (match.type) {
79
+ case 'bold':
80
+ richText.annotations = { bold: true };
81
+ break;
82
+ case 'italic':
83
+ richText.annotations = { italic: true };
84
+ break;
85
+ case 'strikethrough':
86
+ richText.annotations = { strikethrough: true };
87
+ break;
88
+ case 'code':
89
+ richText.annotations = { code: true };
90
+ break;
91
+ case 'link':
92
+ if (match.url) {
93
+ richText.text = { content: match.content, link: { url: match.url } };
94
+ }
95
+ break;
96
+ }
97
+ result.push(richText);
98
+ lastIndex = match.index + match.length;
99
+ }
100
+ // 残りのプレーンテキスト
101
+ if (lastIndex < safeText.length) {
102
+ const plainText = safeText.slice(lastIndex);
103
+ if (plainText) {
104
+ result.push({
105
+ type: 'text',
106
+ text: { content: plainText },
107
+ });
108
+ }
109
+ }
110
+ // 何もマッチしなかった場合
111
+ if (result.length === 0 && safeText) {
112
+ result.push({
113
+ type: 'text',
114
+ text: { content: safeText },
115
+ });
116
+ }
117
+ return result;
118
+ }
119
+ /**
120
+ * RichTextを含むブロックを生成するヘルパー
121
+ */
122
+ function createTextBlock(type, text, extra = {}) {
123
+ return {
124
+ type,
125
+ [type]: {
126
+ rich_text: parseInlineMarkdown(text),
127
+ ...extra,
128
+ },
129
+ };
130
+ }
131
+ /**
132
+ * Markdown文字列をNotionブロック配列に変換
133
+ */
134
+ export function markdownToBlocks(markdown) {
135
+ // 入力長制限(ReDoS対策)
136
+ const safeMarkdown = markdown.length > MAX_INPUT_LENGTH ? markdown.slice(0, MAX_INPUT_LENGTH) : markdown;
137
+ const blocks = [];
138
+ const lines = safeMarkdown.split('\n');
139
+ let i = 0;
140
+ while (i < lines.length) {
141
+ const line = lines[i];
142
+ // 空行はスキップ
143
+ if (!line.trim()) {
144
+ i++;
145
+ continue;
146
+ }
147
+ // コードブロック: ```language
148
+ if (line.startsWith('```')) {
149
+ const language = line.slice(3).trim() || 'plain text';
150
+ const codeLines = [];
151
+ i++;
152
+ while (i < lines.length &&
153
+ !lines[i].startsWith('```') &&
154
+ codeLines.length < MAX_CODE_BLOCK_LINES) {
155
+ codeLines.push(lines[i]);
156
+ i++;
157
+ }
158
+ // 残りの行をスキップ(制限超過時)
159
+ while (i < lines.length && !lines[i].startsWith('```')) {
160
+ i++;
161
+ }
162
+ blocks.push({
163
+ type: 'code',
164
+ code: {
165
+ rich_text: [{ type: 'text', text: { content: codeLines.join('\n') } }],
166
+ language,
167
+ },
168
+ });
169
+ i++; // closing ```
170
+ continue;
171
+ }
172
+ // 水平線: ---
173
+ if (/^-{3,}$/.test(line.trim())) {
174
+ blocks.push({ type: 'divider', divider: {} });
175
+ i++;
176
+ continue;
177
+ }
178
+ // 見出し: # ## ### (####以上はheading_3にフォールバック)
179
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
180
+ if (headingMatch) {
181
+ const rawLevel = headingMatch[1].length;
182
+ const level = Math.min(rawLevel, 3);
183
+ const text = headingMatch[2];
184
+ const type = `heading_${level}`;
185
+ blocks.push(createTextBlock(type, text));
186
+ i++;
187
+ continue;
188
+ }
189
+ // チェックボックス: - [ ] or - [x]
190
+ const todoMatch = line.match(/^-\s*\[([ xX])\]\s*(.*)$/);
191
+ if (todoMatch) {
192
+ const checked = todoMatch[1].toLowerCase() === 'x';
193
+ const text = todoMatch[2];
194
+ blocks.push(createTextBlock('to_do', text, { checked }));
195
+ i++;
196
+ continue;
197
+ }
198
+ // 箇条書き: - or *
199
+ const bulletMatch = line.match(/^[-*]\s+(.+)$/);
200
+ if (bulletMatch) {
201
+ blocks.push(createTextBlock('bulleted_list_item', bulletMatch[1]));
202
+ i++;
203
+ continue;
204
+ }
205
+ // 番号付きリスト: 1. 2. etc
206
+ const numberedMatch = line.match(/^\d+\.\s+(.+)$/);
207
+ if (numberedMatch) {
208
+ blocks.push(createTextBlock('numbered_list_item', numberedMatch[1]));
209
+ i++;
210
+ continue;
211
+ }
212
+ // 引用: >
213
+ const quoteMatch = line.match(/^>\s*(.*)$/);
214
+ if (quoteMatch) {
215
+ // 連続する引用行をまとめる
216
+ const quoteLines = [quoteMatch[1]];
217
+ i++;
218
+ while (i < lines.length && lines[i].startsWith('>')) {
219
+ quoteLines.push(lines[i].replace(/^>\s*/, ''));
220
+ i++;
221
+ }
222
+ blocks.push(createTextBlock('quote', quoteLines.join('\n')));
223
+ continue;
224
+ }
225
+ // 画像: ![alt](url)
226
+ const imageMatch = line.match(/^!\[([^\]]*)\]\(([^)]+)\)$/);
227
+ if (imageMatch) {
228
+ blocks.push({
229
+ type: 'image',
230
+ image: {
231
+ type: 'external',
232
+ external: { url: imageMatch[2] },
233
+ caption: imageMatch[1] ? [{ type: 'text', text: { content: imageMatch[1] } }] : [],
234
+ },
235
+ });
236
+ i++;
237
+ continue;
238
+ }
239
+ // デフォルト: 段落
240
+ blocks.push(createTextBlock('paragraph', line));
241
+ i++;
242
+ }
243
+ return blocks;
244
+ }
@@ -51,6 +51,20 @@ export declare class NotionClient {
51
51
  icon?: Icon | null;
52
52
  cover?: Cover | null;
53
53
  }) => Promise<T>;
54
+ retrieveProperty: <T>(params: {
55
+ page_id: string;
56
+ property_id: string;
57
+ start_cursor?: string;
58
+ page_size?: number;
59
+ }) => Promise<T>;
60
+ move: <T>(params: {
61
+ page_id: string;
62
+ parent: {
63
+ page_id: string;
64
+ } | {
65
+ database_id: string;
66
+ };
67
+ }) => Promise<T>;
54
68
  };
55
69
  databases: {
56
70
  create: <T>(params: {
@@ -85,6 +99,16 @@ export declare class NotionClient {
85
99
  }) => Promise<T>;
86
100
  };
87
101
  blocks: {
102
+ retrieve: <T>(params: {
103
+ block_id: string;
104
+ }) => Promise<T>;
105
+ update: <T>(params: {
106
+ block_id: string;
107
+ [key: string]: unknown;
108
+ }) => Promise<T>;
109
+ delete: <T>(params: {
110
+ block_id: string;
111
+ }) => Promise<T>;
88
112
  children: {
89
113
  list: <T>(params: {
90
114
  block_id: string;
@@ -103,8 +127,24 @@ export declare class NotionClient {
103
127
  parent: {
104
128
  page_id: string;
105
129
  };
130
+ discussion_id?: string;
106
131
  rich_text: RichText[];
107
132
  }) => Promise<T>;
133
+ list: <T>(params: {
134
+ block_id?: string;
135
+ start_cursor?: string;
136
+ page_size?: number;
137
+ }) => Promise<T>;
138
+ };
139
+ users: {
140
+ list: <T>(params?: {
141
+ start_cursor?: string;
142
+ page_size?: number;
143
+ }) => Promise<T>;
144
+ retrieve: <T>(params: {
145
+ user_id: string;
146
+ }) => Promise<T>;
147
+ me: <T>() => Promise<T>;
108
148
  };
109
149
  search: <T>(params?: {
110
150
  query?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"notion-client.d.ts","sourceRoot":"","sources":["../../src/notion-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notion-client.d.ts","sourceRoot":"","sources":["../../src/notion-client.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,16 @@ export class NotionClient {
49
49
  const { page_id, ...body } = params;
50
50
  return this.request(`/pages/${page_id}`, { method: 'PATCH', body });
51
51
  },
52
+ retrieveProperty: (params) => {
53
+ const { page_id, property_id, ...query } = params;
54
+ return this.request(`/pages/${page_id}/properties/${property_id}`, {
55
+ query: query,
56
+ });
57
+ },
58
+ move: (params) => {
59
+ const { page_id, ...body } = params;
60
+ return this.request(`/pages/${page_id}/move`, { method: 'POST', body });
61
+ },
52
62
  };
53
63
  // Databases
54
64
  databases = {
@@ -69,6 +79,16 @@ export class NotionClient {
69
79
  };
70
80
  // Blocks
71
81
  blocks = {
82
+ retrieve: (params) => {
83
+ return this.request(`/blocks/${params.block_id}`);
84
+ },
85
+ update: (params) => {
86
+ const { block_id, ...body } = params;
87
+ return this.request(`/blocks/${block_id}`, { method: 'PATCH', body });
88
+ },
89
+ delete: (params) => {
90
+ return this.request(`/blocks/${params.block_id}`, { method: 'DELETE' });
91
+ },
72
92
  children: {
73
93
  list: (params) => {
74
94
  const { block_id, ...query } = params;
@@ -87,6 +107,25 @@ export class NotionClient {
87
107
  create: (params) => {
88
108
  return this.request('/comments', { method: 'POST', body: params });
89
109
  },
110
+ list: (params) => {
111
+ return this.request('/comments', {
112
+ query: params,
113
+ });
114
+ },
115
+ };
116
+ // Users
117
+ users = {
118
+ list: (params) => {
119
+ return this.request('/users', {
120
+ query: params,
121
+ });
122
+ },
123
+ retrieve: (params) => {
124
+ return this.request(`/users/${params.user_id}`);
125
+ },
126
+ me: () => {
127
+ return this.request('/users/me');
128
+ },
90
129
  };
91
130
  // Search
92
131
  search = (params) => {
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { NotionClient } from '../notion-client.js';
3
+ export declare function registerAppendBlocksSimple(server: McpServer, notion: NotionClient): void;
4
+ //# sourceMappingURL=append-blocks-simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"append-blocks-simple.d.ts","sourceRoot":"","sources":["../../../src/tools/append-blocks-simple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAUvD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAqCxF"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { markdownToBlocks } from '../converters/index.js';
3
+ import { formatResponse, handleError } from '../utils/index.js';
4
+ // Minimal schema for MCP
5
+ const inputSchema = {
6
+ block_id: z.string().describe('Page or block ID to append to'),
7
+ content: z.string().describe('Content in Markdown'),
8
+ after: z.string().optional().describe('Insert after this block ID'),
9
+ };
10
+ export function registerAppendBlocksSimple(server, notion) {
11
+ server.registerTool('append-blocks-simple', {
12
+ description: 'Append blocks to a page using Markdown. ' +
13
+ 'Simpler than append-block-children: just provide markdown text. ' +
14
+ 'Supports: headings (#), lists (- or 1.), checkboxes (- [ ]), code blocks (```), quotes (>), images (![]()), bold (**), italic (*), links ([]()), etc.',
15
+ inputSchema,
16
+ }, async ({ block_id, content, after }) => {
17
+ try {
18
+ // Convert markdown to blocks
19
+ const children = markdownToBlocks(content);
20
+ // Build params
21
+ const params = {
22
+ block_id,
23
+ children,
24
+ };
25
+ if (after) {
26
+ params.after = after;
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ const response = await notion.blocks.children.append(params);
30
+ return formatResponse(response);
31
+ }
32
+ catch (error) {
33
+ return handleError(error);
34
+ }
35
+ });
36
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"create-database.d.ts","sourceRoot":"","sources":["../../../src/tools/create-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAavD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgDpF"}
1
+ {"version":3,"file":"create-database.d.ts","sourceRoot":"","sources":["../../../src/tools/create-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAevD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAgDpF"}
@@ -4,7 +4,9 @@ import { formatResponse, handleError } from '../utils/index.js';
4
4
  const inputSchema = {
5
5
  parent_page_id: z.string().describe('Parent page ID'),
6
6
  title: z.array(z.any()).optional().describe('Database title'),
7
- properties: z.record(z.string(), z.any()).describe('Property schema (must include one title property)'),
7
+ properties: z
8
+ .record(z.string(), z.any())
9
+ .describe('Property schema (must include one title property)'),
8
10
  icon: z.any().optional().describe('Database icon'),
9
11
  cover: z.any().optional().describe('Cover image'),
10
12
  is_inline: z.boolean().optional().describe('Inline database'),
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { NotionClient } from '../notion-client.js';
3
+ export declare function registerCreatePageSimple(server: McpServer, notion: NotionClient): void;
4
+ //# sourceMappingURL=create-page-simple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-page-simple.d.ts","sourceRoot":"","sources":["../../../src/tools/create-page-simple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAYvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA2DtF"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { markdownToBlocks } from '../converters/index.js';
3
+ import { formatResponse, handleError } from '../utils/index.js';
4
+ // Minimal schema for MCP
5
+ const inputSchema = {
6
+ database_id: z.string().describe('Database ID'),
7
+ title: z.string().describe('Page title'),
8
+ content: z.string().optional().describe('Page content in Markdown'),
9
+ properties: z.record(z.string(), z.any()).optional().describe('Additional properties'),
10
+ icon: z.string().optional().describe('Emoji icon (e.g. "bug")'),
11
+ };
12
+ export function registerCreatePageSimple(server, notion) {
13
+ server.registerTool('create-page-simple', {
14
+ description: 'Create a Notion page with Markdown content. ' +
15
+ 'Simpler than create-page: just provide title and markdown text. ' +
16
+ 'Supports: headings (#), lists (- or 1.), checkboxes (- [ ]), code blocks (```), quotes (>), images (![]()), bold (**), italic (*), links ([]()), etc.',
17
+ inputSchema,
18
+ }, async ({ database_id, title, content, properties, icon }) => {
19
+ try {
20
+ // Build properties with title
21
+ const pageProperties = {
22
+ ...properties,
23
+ };
24
+ // Check if any title property is already provided
25
+ // Title properties have the structure: { title: [...] }
26
+ const hasTitleProperty = Object.values(pageProperties).some((prop) => prop && typeof prop === 'object' && 'title' in prop);
27
+ // Only add Name if no title property exists
28
+ if (!hasTitleProperty) {
29
+ pageProperties.Name = {
30
+ title: [{ type: 'text', text: { content: title } }],
31
+ };
32
+ }
33
+ // Build params
34
+ const params = {
35
+ parent: { database_id },
36
+ properties: pageProperties,
37
+ };
38
+ // Convert markdown to blocks if content provided
39
+ if (content) {
40
+ params.children = markdownToBlocks(content);
41
+ }
42
+ // Add icon if provided
43
+ if (icon) {
44
+ params.icon = { type: 'emoji', emoji: icon };
45
+ }
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const response = await notion.pages.create(params);
48
+ return formatResponse(response);
49
+ }
50
+ catch (error) {
51
+ return handleError(error);
52
+ }
53
+ });
54
+ }
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { NotionClient } from '../notion-client.js';
3
+ export declare function registerDeleteBlock(server: McpServer, notion: NotionClient): void;
4
+ //# sourceMappingURL=delete-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-block.d.ts","sourceRoot":"","sources":["../../../src/tools/delete-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAOvD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAkBjF"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { formatResponse, handleError } from '../utils/index.js';
3
+ const inputSchema = {
4
+ block_id: z.string().describe('Block ID to delete'),
5
+ };
6
+ export function registerDeleteBlock(server, notion) {
7
+ server.registerTool('delete-block', {
8
+ description: 'Delete a block by its ID. The block will be archived (moved to trash). ' +
9
+ 'Returns the archived block object.',
10
+ inputSchema,
11
+ }, async ({ block_id }) => {
12
+ try {
13
+ const response = await notion.blocks.delete({ block_id });
14
+ return formatResponse(response);
15
+ }
16
+ catch (error) {
17
+ return handleError(error);
18
+ }
19
+ });
20
+ }
@@ -1,15 +1,28 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { NotionClient } from '../notion-client.js';
3
3
  import { registerAppendBlockChildren } from './append-block-children.js';
4
+ import { registerAppendBlocksSimple } from './append-blocks-simple.js';
4
5
  import { registerCreateComment } from './create-comment.js';
5
6
  import { registerCreateDatabase } from './create-database.js';
6
7
  import { registerCreatePage } from './create-page.js';
8
+ import { registerCreatePageSimple } from './create-page-simple.js';
9
+ import { registerDeleteBlock } from './delete-block.js';
7
10
  import { registerGetBlockChildren } from './get-block-children.js';
11
+ import { registerListComments } from './list-comments.js';
12
+ import { registerListUsers } from './list-users.js';
13
+ import { registerMovePage } from './move-page.js';
8
14
  import { registerQueryDatabase } from './query-database.js';
15
+ import { registerRetrieveBlock } from './retrieve-block.js';
16
+ import { registerRetrieveBotUser } from './retrieve-bot-user.js';
17
+ import { registerRetrieveDatabase } from './retrieve-database.js';
9
18
  import { registerRetrievePage } from './retrieve-page.js';
19
+ import { registerRetrievePageProperty } from './retrieve-page-property.js';
20
+ import { registerRetrieveUser } from './retrieve-user.js';
10
21
  import { registerSearch } from './search.js';
22
+ import { registerUpdateBlock } from './update-block.js';
23
+ import { registerUpdateBlockSimple } from './update-block-simple.js';
11
24
  import { registerUpdateDatabase } from './update-database.js';
12
25
  import { registerUpdatePage } from './update-page.js';
13
26
  export declare function registerAllTools(server: McpServer, notion: NotionClient): void;
14
- export { registerRetrievePage, registerCreatePage, registerUpdatePage, registerCreateDatabase, registerUpdateDatabase, registerQueryDatabase, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerCreateComment, };
27
+ export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase, registerQueryDatabase, registerRetrieveDatabase, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerAppendBlocksSimple, registerRetrieveBlock, registerUpdateBlock, registerUpdateBlockSimple, registerDeleteBlock, registerCreateComment, registerListComments, registerListUsers, registerRetrieveUser, registerRetrieveBotUser, };
15
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAoB9E;AAED,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,GACtB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAmC9E;AAED,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,GACxB,CAAA"}
@@ -1,28 +1,55 @@
1
1
  import { registerAppendBlockChildren } from './append-block-children.js';
2
+ import { registerAppendBlocksSimple } from './append-blocks-simple.js';
2
3
  import { registerCreateComment } from './create-comment.js';
3
4
  import { registerCreateDatabase } from './create-database.js';
4
5
  import { registerCreatePage } from './create-page.js';
6
+ import { registerCreatePageSimple } from './create-page-simple.js';
7
+ import { registerDeleteBlock } from './delete-block.js';
5
8
  import { registerGetBlockChildren } from './get-block-children.js';
9
+ import { registerListComments } from './list-comments.js';
10
+ import { registerListUsers } from './list-users.js';
11
+ import { registerMovePage } from './move-page.js';
6
12
  import { registerQueryDatabase } from './query-database.js';
13
+ import { registerRetrieveBlock } from './retrieve-block.js';
14
+ import { registerRetrieveBotUser } from './retrieve-bot-user.js';
15
+ import { registerRetrieveDatabase } from './retrieve-database.js';
7
16
  import { registerRetrievePage } from './retrieve-page.js';
17
+ import { registerRetrievePageProperty } from './retrieve-page-property.js';
18
+ import { registerRetrieveUser } from './retrieve-user.js';
8
19
  import { registerSearch } from './search.js';
20
+ import { registerUpdateBlock } from './update-block.js';
21
+ import { registerUpdateBlockSimple } from './update-block-simple.js';
9
22
  import { registerUpdateDatabase } from './update-database.js';
10
23
  import { registerUpdatePage } from './update-page.js';
11
24
  export function registerAllTools(server, notion) {
12
25
  // Page operations
13
26
  registerRetrievePage(server, notion);
14
27
  registerCreatePage(server, notion);
28
+ registerCreatePageSimple(server, notion);
15
29
  registerUpdatePage(server, notion);
30
+ registerRetrievePageProperty(server, notion);
31
+ registerMovePage(server, notion);
16
32
  // Database operations
17
33
  registerCreateDatabase(server, notion);
18
34
  registerUpdateDatabase(server, notion);
19
35
  registerQueryDatabase(server, notion);
36
+ registerRetrieveDatabase(server, notion);
20
37
  // Search
21
38
  registerSearch(server, notion);
22
39
  // Block operations
23
40
  registerGetBlockChildren(server, notion);
24
41
  registerAppendBlockChildren(server, notion);
42
+ registerAppendBlocksSimple(server, notion);
43
+ registerRetrieveBlock(server, notion);
44
+ registerUpdateBlock(server, notion);
45
+ registerUpdateBlockSimple(server, notion);
46
+ registerDeleteBlock(server, notion);
25
47
  // Comment operations
26
48
  registerCreateComment(server, notion);
49
+ registerListComments(server, notion);
50
+ // User operations
51
+ registerListUsers(server, notion);
52
+ registerRetrieveUser(server, notion);
53
+ registerRetrieveBotUser(server, notion);
27
54
  }
28
- export { registerRetrievePage, registerCreatePage, registerUpdatePage, registerCreateDatabase, registerUpdateDatabase, registerQueryDatabase, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerCreateComment, };
55
+ export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase, registerQueryDatabase, registerRetrieveDatabase, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerAppendBlocksSimple, registerRetrieveBlock, registerUpdateBlock, registerUpdateBlockSimple, registerDeleteBlock, registerCreateComment, registerListComments, registerListUsers, registerRetrieveUser, registerRetrieveBotUser, };
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { NotionClient } from '../notion-client.js';
3
+ export declare function registerListComments(server: McpServer, notion: NotionClient): void;
4
+ //# sourceMappingURL=list-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-comments.d.ts","sourceRoot":"","sources":["../../../src/tools/list-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA6BvD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA6ClF"}