@n24q02m/better-notion-mcp 1.0.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/LICENSE +21 -0
- package/README.md +240 -0
- package/bin/cli.mjs +117 -0
- package/build/scripts/start-server.d.ts +6 -0
- package/build/scripts/start-server.d.ts.map +1 -0
- package/build/scripts/start-server.js +21 -0
- package/build/scripts/start-server.js.map +1 -0
- package/build/src/init-server.d.ts +29 -0
- package/build/src/init-server.d.ts.map +1 -0
- package/build/src/init-server.js +32 -0
- package/build/src/init-server.js.map +1 -0
- package/build/src/tools/composite/blocks.d.ts +16 -0
- package/build/src/tools/composite/blocks.d.ts.map +1 -0
- package/build/src/tools/composite/blocks.js +104 -0
- package/build/src/tools/composite/blocks.js.map +1 -0
- package/build/src/tools/composite/comments.d.ts +16 -0
- package/build/src/tools/composite/comments.d.ts.map +1 -0
- package/build/src/tools/composite/comments.js +69 -0
- package/build/src/tools/composite/comments.js.map +1 -0
- package/build/src/tools/composite/content.d.ts +13 -0
- package/build/src/tools/composite/content.d.ts.map +1 -0
- package/build/src/tools/composite/content.js +50 -0
- package/build/src/tools/composite/content.js.map +1 -0
- package/build/src/tools/composite/databases.d.ts +33 -0
- package/build/src/tools/composite/databases.d.ts.map +1 -0
- package/build/src/tools/composite/databases.js +419 -0
- package/build/src/tools/composite/databases.js.map +1 -0
- package/build/src/tools/composite/pages.d.ts +24 -0
- package/build/src/tools/composite/pages.d.ts.map +1 -0
- package/build/src/tools/composite/pages.js +316 -0
- package/build/src/tools/composite/pages.js.map +1 -0
- package/build/src/tools/composite/search.d.ts +23 -0
- package/build/src/tools/composite/search.d.ts.map +1 -0
- package/build/src/tools/composite/search.js +94 -0
- package/build/src/tools/composite/search.js.map +1 -0
- package/build/src/tools/composite/users.d.ts +15 -0
- package/build/src/tools/composite/users.d.ts.map +1 -0
- package/build/src/tools/composite/users.js +93 -0
- package/build/src/tools/composite/users.js.map +1 -0
- package/build/src/tools/composite/workspace.d.ts +25 -0
- package/build/src/tools/composite/workspace.d.ts.map +1 -0
- package/build/src/tools/composite/workspace.js +72 -0
- package/build/src/tools/composite/workspace.js.map +1 -0
- package/build/src/tools/helpers/errors.d.ts +43 -0
- package/build/src/tools/helpers/errors.d.ts.map +1 -0
- package/build/src/tools/helpers/errors.js +162 -0
- package/build/src/tools/helpers/errors.js.map +1 -0
- package/build/src/tools/helpers/markdown.d.ts +45 -0
- package/build/src/tools/helpers/markdown.d.ts.map +1 -0
- package/build/src/tools/helpers/markdown.js +320 -0
- package/build/src/tools/helpers/markdown.js.map +1 -0
- package/build/src/tools/helpers/pagination.d.ts +42 -0
- package/build/src/tools/helpers/pagination.d.ts.map +1 -0
- package/build/src/tools/helpers/pagination.js +72 -0
- package/build/src/tools/helpers/pagination.js.map +1 -0
- package/build/src/tools/helpers/properties.d.ts +10 -0
- package/build/src/tools/helpers/properties.d.ts.map +1 -0
- package/build/src/tools/helpers/properties.js +57 -0
- package/build/src/tools/helpers/properties.js.map +1 -0
- package/build/src/tools/helpers/richtext.d.ts +85 -0
- package/build/src/tools/helpers/richtext.d.ts.map +1 -0
- package/build/src/tools/helpers/richtext.js +146 -0
- package/build/src/tools/helpers/richtext.js.map +1 -0
- package/build/src/tools/registry.d.ts +10 -0
- package/build/src/tools/registry.d.ts.map +1 -0
- package/build/src/tools/registry.js +342 -0
- package/build/src/tools/registry.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pages Mega Tool
|
|
3
|
+
* All page operations in one unified interface
|
|
4
|
+
*/
|
|
5
|
+
import { NotionMCPError, withErrorHandling } from '../helpers/errors.js';
|
|
6
|
+
import { blocksToMarkdown, markdownToBlocks } from '../helpers/markdown.js';
|
|
7
|
+
import { autoPaginate } from '../helpers/pagination.js';
|
|
8
|
+
import { convertToNotionProperties } from '../helpers/properties.js';
|
|
9
|
+
import * as RichText from '../helpers/richtext.js';
|
|
10
|
+
/**
|
|
11
|
+
* Unified pages tool - handles all page operations
|
|
12
|
+
*/
|
|
13
|
+
export async function pages(notion, input) {
|
|
14
|
+
return withErrorHandling(async () => {
|
|
15
|
+
switch (input.action) {
|
|
16
|
+
case 'create':
|
|
17
|
+
return await createPage(notion, input);
|
|
18
|
+
case 'get':
|
|
19
|
+
return await getPage(notion, input);
|
|
20
|
+
case 'update':
|
|
21
|
+
return await updatePage(notion, input);
|
|
22
|
+
case 'archive':
|
|
23
|
+
case 'restore':
|
|
24
|
+
return await archivePage(notion, input);
|
|
25
|
+
case 'duplicate':
|
|
26
|
+
return await duplicatePage(notion, input);
|
|
27
|
+
default:
|
|
28
|
+
throw new NotionMCPError(`Unknown action: ${input.action}`, 'VALIDATION_ERROR', 'Supported actions: create, get, update, archive, restore, move, duplicate');
|
|
29
|
+
}
|
|
30
|
+
})();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create page with title and content
|
|
34
|
+
* Maps to: POST /v1/pages + PATCH /v1/blocks/{id}/children
|
|
35
|
+
*/
|
|
36
|
+
async function createPage(notion, input) {
|
|
37
|
+
if (!input.title) {
|
|
38
|
+
throw new NotionMCPError('title is required for create action', 'VALIDATION_ERROR', 'Provide page title');
|
|
39
|
+
}
|
|
40
|
+
if (!input.parent_id) {
|
|
41
|
+
throw new NotionMCPError('parent_id is required for page creation', 'VALIDATION_ERROR', 'Integration tokens cannot create workspace-level pages. Provide parent_id (database or page ID).');
|
|
42
|
+
}
|
|
43
|
+
const normalizedId = input.parent_id.replace(/-/g, '');
|
|
44
|
+
// Auto-detect parent type
|
|
45
|
+
let parent;
|
|
46
|
+
if (input.properties && Object.keys(input.properties).length > 0) {
|
|
47
|
+
parent = { type: 'database_id', database_id: normalizedId };
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
parent = { type: 'page_id', page_id: normalizedId };
|
|
51
|
+
}
|
|
52
|
+
// Prepare properties
|
|
53
|
+
let properties = {};
|
|
54
|
+
if (parent.database_id) {
|
|
55
|
+
properties = convertToNotionProperties(input.properties || {});
|
|
56
|
+
if (!properties.title && !properties.Name && !properties.Title) {
|
|
57
|
+
properties.Name = { title: [RichText.text(input.title)] };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
properties = { title: { title: [RichText.text(input.title)] } };
|
|
62
|
+
}
|
|
63
|
+
const pageData = { parent, properties };
|
|
64
|
+
if (input.icon)
|
|
65
|
+
pageData.icon = { type: 'emoji', emoji: input.icon };
|
|
66
|
+
if (input.cover)
|
|
67
|
+
pageData.cover = { type: 'external', external: { url: input.cover } };
|
|
68
|
+
const page = await notion.pages.create(pageData);
|
|
69
|
+
// Add content if provided
|
|
70
|
+
if (input.content) {
|
|
71
|
+
const blocks = markdownToBlocks(input.content);
|
|
72
|
+
if (blocks.length > 0) {
|
|
73
|
+
await notion.blocks.children.append({
|
|
74
|
+
block_id: page.id,
|
|
75
|
+
children: blocks
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
action: 'create',
|
|
81
|
+
page_id: page.id,
|
|
82
|
+
url: page.url,
|
|
83
|
+
created: true
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get page with full content as markdown
|
|
88
|
+
* Maps to: GET /v1/pages/{id} + GET /v1/blocks/{id}/children
|
|
89
|
+
*/
|
|
90
|
+
async function getPage(notion, input) {
|
|
91
|
+
if (!input.page_id) {
|
|
92
|
+
throw new NotionMCPError('page_id is required for get action', 'VALIDATION_ERROR', 'Provide page_id');
|
|
93
|
+
}
|
|
94
|
+
const page = await notion.pages.retrieve({ page_id: input.page_id });
|
|
95
|
+
// Get all blocks with auto-pagination
|
|
96
|
+
const blocks = await autoPaginate((cursor) => notion.blocks.children.list({
|
|
97
|
+
block_id: input.page_id,
|
|
98
|
+
start_cursor: cursor,
|
|
99
|
+
page_size: 100
|
|
100
|
+
}));
|
|
101
|
+
const markdown = blocksToMarkdown(blocks);
|
|
102
|
+
// Extract properties
|
|
103
|
+
const properties = {};
|
|
104
|
+
for (const [key, prop] of Object.entries(page.properties)) {
|
|
105
|
+
const p = prop;
|
|
106
|
+
if (p.type === 'title' && p.title) {
|
|
107
|
+
properties[key] = p.title.map((t) => t.plain_text).join('');
|
|
108
|
+
}
|
|
109
|
+
else if (p.type === 'rich_text' && p.rich_text) {
|
|
110
|
+
properties[key] = p.rich_text.map((t) => t.plain_text).join('');
|
|
111
|
+
}
|
|
112
|
+
else if (p.type === 'select' && p.select) {
|
|
113
|
+
properties[key] = p.select.name;
|
|
114
|
+
}
|
|
115
|
+
else if (p.type === 'multi_select' && p.multi_select) {
|
|
116
|
+
properties[key] = p.multi_select.map((s) => s.name);
|
|
117
|
+
}
|
|
118
|
+
else if (p.type === 'number') {
|
|
119
|
+
properties[key] = p.number;
|
|
120
|
+
}
|
|
121
|
+
else if (p.type === 'checkbox') {
|
|
122
|
+
properties[key] = p.checkbox;
|
|
123
|
+
}
|
|
124
|
+
else if (p.type === 'url') {
|
|
125
|
+
properties[key] = p.url;
|
|
126
|
+
}
|
|
127
|
+
else if (p.type === 'email') {
|
|
128
|
+
properties[key] = p.email;
|
|
129
|
+
}
|
|
130
|
+
else if (p.type === 'phone_number') {
|
|
131
|
+
properties[key] = p.phone_number;
|
|
132
|
+
}
|
|
133
|
+
else if (p.type === 'date' && p.date) {
|
|
134
|
+
properties[key] = p.date.start + (p.date.end ? ` to ${p.date.end}` : '');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
action: 'get',
|
|
139
|
+
page_id: page.id,
|
|
140
|
+
url: page.url,
|
|
141
|
+
created_time: page.created_time,
|
|
142
|
+
last_edited_time: page.last_edited_time,
|
|
143
|
+
archived: page.archived,
|
|
144
|
+
properties,
|
|
145
|
+
content: markdown,
|
|
146
|
+
block_count: blocks.length
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Update page content/properties
|
|
151
|
+
* Maps to: PATCH /v1/pages/{id} + PATCH /v1/blocks/{id}/children
|
|
152
|
+
*/
|
|
153
|
+
async function updatePage(notion, input) {
|
|
154
|
+
if (!input.page_id) {
|
|
155
|
+
throw new NotionMCPError('page_id is required for update action', 'VALIDATION_ERROR', 'Provide page_id');
|
|
156
|
+
}
|
|
157
|
+
const updates = {};
|
|
158
|
+
// Update metadata
|
|
159
|
+
if (input.icon)
|
|
160
|
+
updates.icon = { type: 'emoji', emoji: input.icon };
|
|
161
|
+
if (input.cover)
|
|
162
|
+
updates.cover = { type: 'external', external: { url: input.cover } };
|
|
163
|
+
if (input.archived !== undefined)
|
|
164
|
+
updates.archived = input.archived;
|
|
165
|
+
// Update properties
|
|
166
|
+
if (input.properties || input.title) {
|
|
167
|
+
updates.properties = {};
|
|
168
|
+
if (input.title) {
|
|
169
|
+
updates.properties.title = { title: [RichText.text(input.title)] };
|
|
170
|
+
}
|
|
171
|
+
if (input.properties) {
|
|
172
|
+
const converted = convertToNotionProperties(input.properties);
|
|
173
|
+
updates.properties = { ...updates.properties, ...converted };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Update page if we have metadata/property changes
|
|
177
|
+
if (Object.keys(updates).length > 0) {
|
|
178
|
+
await notion.pages.update({
|
|
179
|
+
page_id: input.page_id,
|
|
180
|
+
...updates
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// Handle content updates
|
|
184
|
+
if (input.content || input.append_content || input.prepend_content) {
|
|
185
|
+
if (input.content) {
|
|
186
|
+
// Replace all content
|
|
187
|
+
const existingBlocks = await autoPaginate((cursor) => notion.blocks.children.list({
|
|
188
|
+
block_id: input.page_id,
|
|
189
|
+
start_cursor: cursor,
|
|
190
|
+
page_size: 100
|
|
191
|
+
}));
|
|
192
|
+
for (const block of existingBlocks) {
|
|
193
|
+
await notion.blocks.delete({ block_id: block.id });
|
|
194
|
+
}
|
|
195
|
+
const newBlocks = markdownToBlocks(input.content);
|
|
196
|
+
if (newBlocks.length > 0) {
|
|
197
|
+
await notion.blocks.children.append({
|
|
198
|
+
block_id: input.page_id,
|
|
199
|
+
children: newBlocks
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if (input.append_content) {
|
|
204
|
+
const blocks = markdownToBlocks(input.append_content);
|
|
205
|
+
if (blocks.length > 0) {
|
|
206
|
+
await notion.blocks.children.append({
|
|
207
|
+
block_id: input.page_id,
|
|
208
|
+
children: blocks
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else if (input.prepend_content) {
|
|
213
|
+
const existingBlocks = await autoPaginate((cursor) => notion.blocks.children.list({
|
|
214
|
+
block_id: input.page_id,
|
|
215
|
+
start_cursor: cursor,
|
|
216
|
+
page_size: 1
|
|
217
|
+
}));
|
|
218
|
+
const newBlocks = markdownToBlocks(input.prepend_content);
|
|
219
|
+
if (newBlocks.length > 0) {
|
|
220
|
+
const firstBlockId = existingBlocks[0]?.id;
|
|
221
|
+
if (firstBlockId) {
|
|
222
|
+
await notion.blocks.children.append({
|
|
223
|
+
block_id: input.page_id,
|
|
224
|
+
children: newBlocks,
|
|
225
|
+
after: undefined
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
await notion.blocks.children.append({
|
|
230
|
+
block_id: input.page_id,
|
|
231
|
+
children: newBlocks
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
action: 'update',
|
|
239
|
+
page_id: input.page_id,
|
|
240
|
+
updated: true
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Archive or restore page
|
|
245
|
+
* Maps to: PATCH /v1/pages/{id}
|
|
246
|
+
*/
|
|
247
|
+
async function archivePage(notion, input) {
|
|
248
|
+
const pageIds = input.page_ids || (input.page_id ? [input.page_id] : []);
|
|
249
|
+
if (pageIds.length === 0) {
|
|
250
|
+
throw new NotionMCPError('page_id or page_ids required', 'VALIDATION_ERROR', 'Provide at least one page ID');
|
|
251
|
+
}
|
|
252
|
+
const archived = input.action === 'archive';
|
|
253
|
+
const results = [];
|
|
254
|
+
for (const pageId of pageIds) {
|
|
255
|
+
await notion.pages.update({
|
|
256
|
+
page_id: pageId,
|
|
257
|
+
archived
|
|
258
|
+
});
|
|
259
|
+
results.push({ page_id: pageId, archived });
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
action: input.action,
|
|
263
|
+
processed: results.length,
|
|
264
|
+
results
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Move page to new parent
|
|
269
|
+
* Maps to: PATCH /v1/pages/{id}
|
|
270
|
+
*/
|
|
271
|
+
/**
|
|
272
|
+
* Duplicate page
|
|
273
|
+
* Maps to: GET /v1/pages/{id} + POST /v1/pages + GET/PATCH /v1/blocks
|
|
274
|
+
*/
|
|
275
|
+
async function duplicatePage(notion, input) {
|
|
276
|
+
const pageIds = input.page_ids || (input.page_id ? [input.page_id] : []);
|
|
277
|
+
if (pageIds.length === 0) {
|
|
278
|
+
throw new NotionMCPError('page_id or page_ids required', 'VALIDATION_ERROR', 'Provide at least one page ID');
|
|
279
|
+
}
|
|
280
|
+
const results = [];
|
|
281
|
+
for (const pageId of pageIds) {
|
|
282
|
+
// Get original page
|
|
283
|
+
const originalPage = await notion.pages.retrieve({ page_id: pageId });
|
|
284
|
+
// Get original content
|
|
285
|
+
const originalBlocks = await autoPaginate((cursor) => notion.blocks.children.list({
|
|
286
|
+
block_id: pageId,
|
|
287
|
+
start_cursor: cursor,
|
|
288
|
+
page_size: 100
|
|
289
|
+
}));
|
|
290
|
+
// Create duplicate
|
|
291
|
+
const duplicatePage = await notion.pages.create({
|
|
292
|
+
parent: originalPage.parent,
|
|
293
|
+
properties: originalPage.properties,
|
|
294
|
+
icon: originalPage.icon,
|
|
295
|
+
cover: originalPage.cover
|
|
296
|
+
});
|
|
297
|
+
// Copy content
|
|
298
|
+
if (originalBlocks.length > 0) {
|
|
299
|
+
await notion.blocks.children.append({
|
|
300
|
+
block_id: duplicatePage.id,
|
|
301
|
+
children: originalBlocks
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
results.push({
|
|
305
|
+
original_id: pageId,
|
|
306
|
+
duplicate_id: duplicatePage.id,
|
|
307
|
+
url: duplicatePage.url
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
action: 'duplicate',
|
|
312
|
+
processed: results.length,
|
|
313
|
+
results
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../../src/tools/composite/pages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Composite Tool
|
|
3
|
+
* Smart context-aware search across workspace
|
|
4
|
+
*/
|
|
5
|
+
import { Client } from '@notionhq/client';
|
|
6
|
+
export interface SearchSmartInput {
|
|
7
|
+
query: string;
|
|
8
|
+
filter?: {
|
|
9
|
+
object?: 'page' | 'database';
|
|
10
|
+
property?: string;
|
|
11
|
+
value?: any;
|
|
12
|
+
};
|
|
13
|
+
sort?: {
|
|
14
|
+
direction: 'ascending' | 'descending';
|
|
15
|
+
timestamp: 'last_edited_time' | 'created_time';
|
|
16
|
+
};
|
|
17
|
+
limit?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Smart search with context-aware ranking
|
|
21
|
+
*/
|
|
22
|
+
export declare function searchSmart(notion: Client, input: SearchSmartInput): Promise<any>;
|
|
23
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAIzC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,GAAG,CAAA;KACZ,CAAA;IACD,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,WAAW,GAAG,YAAY,CAAA;QACrC,SAAS,EAAE,kBAAkB,GAAG,cAAc,CAAA;KAC/C,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,GAAG,CAAC,CAmDd"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Composite Tool
|
|
3
|
+
* Smart context-aware search across workspace
|
|
4
|
+
*/
|
|
5
|
+
import { withErrorHandling } from '../helpers/errors.js';
|
|
6
|
+
import * as RichText from '../helpers/richtext.js';
|
|
7
|
+
/**
|
|
8
|
+
* Smart search with context-aware ranking
|
|
9
|
+
*/
|
|
10
|
+
export async function searchSmart(notion, input) {
|
|
11
|
+
return withErrorHandling(async () => {
|
|
12
|
+
const searchParams = {
|
|
13
|
+
query: input.query,
|
|
14
|
+
page_size: Math.min(input.limit || 100, 100)
|
|
15
|
+
};
|
|
16
|
+
if (input.filter) {
|
|
17
|
+
searchParams.filter = input.filter;
|
|
18
|
+
}
|
|
19
|
+
if (input.sort) {
|
|
20
|
+
searchParams.sort = input.sort;
|
|
21
|
+
}
|
|
22
|
+
const response = await notion.search(searchParams);
|
|
23
|
+
const results = response.results.map((item) => {
|
|
24
|
+
if (item.object === 'page') {
|
|
25
|
+
return {
|
|
26
|
+
type: 'page',
|
|
27
|
+
id: item.id,
|
|
28
|
+
url: item.url,
|
|
29
|
+
title: extractTitle(item),
|
|
30
|
+
created_time: item.created_time,
|
|
31
|
+
last_edited_time: item.last_edited_time,
|
|
32
|
+
archived: item.archived,
|
|
33
|
+
parent: formatParent(item.parent)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else if (item.object === 'database') {
|
|
37
|
+
return {
|
|
38
|
+
type: 'database',
|
|
39
|
+
id: item.id,
|
|
40
|
+
url: item.url,
|
|
41
|
+
title: extractDatabaseTitle(item),
|
|
42
|
+
created_time: item.created_time,
|
|
43
|
+
last_edited_time: item.last_edited_time,
|
|
44
|
+
archived: item.archived,
|
|
45
|
+
description: item.description
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return item;
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
query: input.query,
|
|
52
|
+
total_results: results.length,
|
|
53
|
+
has_more: response.has_more,
|
|
54
|
+
results
|
|
55
|
+
};
|
|
56
|
+
})();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract title from page
|
|
60
|
+
*/
|
|
61
|
+
function extractTitle(page) {
|
|
62
|
+
if (!page.properties)
|
|
63
|
+
return 'Untitled';
|
|
64
|
+
const titleProp = Object.values(page.properties).find((prop) => prop.type === 'title');
|
|
65
|
+
if (titleProp && titleProp.title && titleProp.title.length > 0) {
|
|
66
|
+
return RichText.extractPlainText(titleProp.title);
|
|
67
|
+
}
|
|
68
|
+
return 'Untitled';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extract database title
|
|
72
|
+
*/
|
|
73
|
+
function extractDatabaseTitle(database) {
|
|
74
|
+
if (database.title && database.title.length > 0) {
|
|
75
|
+
return RichText.extractPlainText(database.title);
|
|
76
|
+
}
|
|
77
|
+
return 'Untitled Database';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Format parent information
|
|
81
|
+
*/
|
|
82
|
+
function formatParent(parent) {
|
|
83
|
+
if (parent.type === 'workspace') {
|
|
84
|
+
return { type: 'workspace' };
|
|
85
|
+
}
|
|
86
|
+
else if (parent.type === 'page_id') {
|
|
87
|
+
return { type: 'page', id: parent.page_id };
|
|
88
|
+
}
|
|
89
|
+
else if (parent.type === 'database_id') {
|
|
90
|
+
return { type: 'database', id: parent.database_id };
|
|
91
|
+
}
|
|
92
|
+
return parent;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/tools/composite/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Users Mega Tool
|
|
3
|
+
* All user operations in one unified interface
|
|
4
|
+
*/
|
|
5
|
+
import { Client } from '@notionhq/client';
|
|
6
|
+
export interface UsersInput {
|
|
7
|
+
action: 'list' | 'get' | 'me' | 'from_workspace';
|
|
8
|
+
user_id?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Unified users tool
|
|
12
|
+
* Maps to: GET /v1/users and GET /v1/users/{id} and GET /v1/users/me
|
|
13
|
+
*/
|
|
14
|
+
export declare function users(notion: Client, input: UsersInput): Promise<any>;
|
|
15
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/users.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAIzC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAA;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAsB,KAAK,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,GAAG,CAAC,CAmGd"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Users Mega Tool
|
|
3
|
+
* All user operations in one unified interface
|
|
4
|
+
*/
|
|
5
|
+
import { NotionMCPError, withErrorHandling } from '../helpers/errors.js';
|
|
6
|
+
import { autoPaginate } from '../helpers/pagination.js';
|
|
7
|
+
/**
|
|
8
|
+
* Unified users tool
|
|
9
|
+
* Maps to: GET /v1/users and GET /v1/users/{id} and GET /v1/users/me
|
|
10
|
+
*/
|
|
11
|
+
export async function users(notion, input) {
|
|
12
|
+
return withErrorHandling(async () => {
|
|
13
|
+
switch (input.action) {
|
|
14
|
+
case 'list': {
|
|
15
|
+
const usersList = await autoPaginate((cursor) => notion.users.list({
|
|
16
|
+
start_cursor: cursor,
|
|
17
|
+
page_size: 100
|
|
18
|
+
}));
|
|
19
|
+
return {
|
|
20
|
+
action: 'list',
|
|
21
|
+
total: usersList.length,
|
|
22
|
+
users: usersList.map((user) => ({
|
|
23
|
+
id: user.id,
|
|
24
|
+
type: user.type,
|
|
25
|
+
name: user.name || 'Unknown',
|
|
26
|
+
avatar_url: user.avatar_url,
|
|
27
|
+
email: user.type === 'person' ? user.person?.email : undefined
|
|
28
|
+
}))
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
case 'get': {
|
|
32
|
+
if (!input.user_id) {
|
|
33
|
+
throw new NotionMCPError('user_id required for get action', 'VALIDATION_ERROR', 'Provide user_id');
|
|
34
|
+
}
|
|
35
|
+
const user = await notion.users.retrieve({ user_id: input.user_id });
|
|
36
|
+
return {
|
|
37
|
+
action: 'get',
|
|
38
|
+
id: user.id,
|
|
39
|
+
type: user.type,
|
|
40
|
+
name: user.name || 'Unknown',
|
|
41
|
+
avatar_url: user.avatar_url,
|
|
42
|
+
email: user.type === 'person' ? user.person?.email : undefined
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
case 'me': {
|
|
46
|
+
const botUser = await notion.users.retrieve({ user_id: 'me' });
|
|
47
|
+
return {
|
|
48
|
+
action: 'me',
|
|
49
|
+
id: botUser.id,
|
|
50
|
+
type: botUser.type,
|
|
51
|
+
name: botUser.name || 'Bot',
|
|
52
|
+
bot: botUser.bot
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
case 'from_workspace': {
|
|
56
|
+
// Alternative method: Search pages and extract user info from metadata
|
|
57
|
+
// This bypasses the permission issue with direct users.list() call
|
|
58
|
+
const searchResults = await notion.search({
|
|
59
|
+
filter: { property: 'object', value: 'page' },
|
|
60
|
+
page_size: 100
|
|
61
|
+
});
|
|
62
|
+
const usersMap = new Map();
|
|
63
|
+
for (const page of searchResults.results) {
|
|
64
|
+
// Extract users from created_by and last_edited_by
|
|
65
|
+
if (page.created_by) {
|
|
66
|
+
usersMap.set(page.created_by.id, {
|
|
67
|
+
id: page.created_by.id,
|
|
68
|
+
type: page.created_by.object,
|
|
69
|
+
source: 'page_metadata'
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (page.last_edited_by) {
|
|
73
|
+
usersMap.set(page.last_edited_by.id, {
|
|
74
|
+
id: page.last_edited_by.id,
|
|
75
|
+
type: page.last_edited_by.object,
|
|
76
|
+
source: 'page_metadata'
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const users = Array.from(usersMap.values());
|
|
81
|
+
return {
|
|
82
|
+
action: 'from_workspace',
|
|
83
|
+
total: users.length,
|
|
84
|
+
users,
|
|
85
|
+
note: 'Users extracted from accessible pages. Use "me" action for bot info, or share more pages for more users.'
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
default:
|
|
89
|
+
throw new NotionMCPError(`Unknown action: ${input.action}`, 'VALIDATION_ERROR', 'Supported actions: list, get, me, from_workspace');
|
|
90
|
+
}
|
|
91
|
+
})();
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../../src/tools/composite/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Mega Tool
|
|
3
|
+
* Workspace exploration and info
|
|
4
|
+
*/
|
|
5
|
+
import { Client } from '@notionhq/client';
|
|
6
|
+
export interface WorkspaceInput {
|
|
7
|
+
action: 'info' | 'search';
|
|
8
|
+
query?: string;
|
|
9
|
+
filter?: {
|
|
10
|
+
object?: 'page' | 'data_source';
|
|
11
|
+
property?: string;
|
|
12
|
+
value?: any;
|
|
13
|
+
};
|
|
14
|
+
sort?: {
|
|
15
|
+
direction?: 'ascending' | 'descending';
|
|
16
|
+
timestamp?: 'last_edited_time' | 'created_time';
|
|
17
|
+
};
|
|
18
|
+
limit?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Unified workspace tool
|
|
22
|
+
* Maps to: GET /v1/users/me and POST /v1/search
|
|
23
|
+
*/
|
|
24
|
+
export declare function workspace(notion: Client, input: WorkspaceInput): Promise<any>;
|
|
25
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/tools/composite/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAIzC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAA;IAGzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,GAAG,CAAA;KACZ,CAAA;IACD,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,WAAW,GAAG,YAAY,CAAA;QACtC,SAAS,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAA;KAChD,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,GAAG,CAAC,CA2Ed"}
|