@n24q02m/better-notion-mcp 1.0.19 → 2.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/README.md +25 -11
- package/bin/cli.mjs +6 -112
- package/build/src/docs/blocks.md +41 -0
- package/build/src/docs/comments.md +30 -0
- package/build/src/docs/content_convert.md +23 -0
- package/build/src/docs/databases.md +56 -0
- package/build/src/docs/pages.md +51 -0
- package/build/src/docs/users.md +36 -0
- package/build/src/docs/workspace.md +38 -0
- package/build/src/init-server.d.ts.map +1 -1
- package/build/src/init-server.js +2 -1
- package/build/src/init-server.js.map +1 -1
- package/build/src/tools/registry.d.ts.map +1 -1
- package/build/src/tools/registry.js +74 -108
- package/build/src/tools/registry.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-server.js","sourceRoot":"","sources":["../../src/init-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,oCAAoC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC9D,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"init-server.js","sourceRoot":"","sources":["../../src/init-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,oCAAoC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC9D,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;SACd;KACF,CACF,CAAA;IAED,2BAA2B;IAC3B,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAElC,0BAA0B;IAC1B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAgOvE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAyHhE"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* Tool Registry - 7 Mega Tools
|
|
3
3
|
* Consolidated registration for maximum coverage with minimal tools
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { dirname, join } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
6
9
|
import { Client } from '@notionhq/client';
|
|
7
10
|
// Import mega tools
|
|
8
11
|
import { blocks } from './composite/blocks.js';
|
|
@@ -13,29 +16,30 @@ import { pages } from './composite/pages.js';
|
|
|
13
16
|
import { users } from './composite/users.js';
|
|
14
17
|
import { workspace } from './composite/workspace.js';
|
|
15
18
|
import { aiReadableMessage, NotionMCPError } from './helpers/errors.js';
|
|
19
|
+
// Get docs directory path
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = dirname(__filename);
|
|
22
|
+
const DOCS_DIR = join(__dirname, '..', 'docs');
|
|
23
|
+
/**
|
|
24
|
+
* Documentation resources for full tool details
|
|
25
|
+
*/
|
|
26
|
+
const RESOURCES = [
|
|
27
|
+
{ uri: 'notion://docs/pages', name: 'Pages Tool Docs', file: 'pages.md' },
|
|
28
|
+
{ uri: 'notion://docs/databases', name: 'Databases Tool Docs', file: 'databases.md' },
|
|
29
|
+
{ uri: 'notion://docs/blocks', name: 'Blocks Tool Docs', file: 'blocks.md' },
|
|
30
|
+
{ uri: 'notion://docs/users', name: 'Users Tool Docs', file: 'users.md' },
|
|
31
|
+
{ uri: 'notion://docs/workspace', name: 'Workspace Tool Docs', file: 'workspace.md' },
|
|
32
|
+
{ uri: 'notion://docs/comments', name: 'Comments Tool Docs', file: 'comments.md' },
|
|
33
|
+
{ uri: 'notion://docs/content_convert', name: 'Content Convert Tool Docs', file: 'content_convert.md' }
|
|
34
|
+
];
|
|
16
35
|
/**
|
|
17
36
|
* 7 Mega Tools covering 75% of Official Notion API
|
|
37
|
+
* Compressed descriptions for token optimization (~77% reduction)
|
|
18
38
|
*/
|
|
19
39
|
const TOOLS = [
|
|
20
40
|
{
|
|
21
41
|
name: 'pages',
|
|
22
|
-
description:
|
|
23
|
-
|
|
24
|
-
**IMPORTANT:** Integration tokens cannot create workspace-level pages. Always provide parent_id (page or database ID).
|
|
25
|
-
|
|
26
|
-
Actions: create, get, update, archive, restore, duplicate.
|
|
27
|
-
|
|
28
|
-
Maps to: POST/GET/PATCH /v1/pages + /v1/blocks/{id}/children
|
|
29
|
-
|
|
30
|
-
Examples:
|
|
31
|
-
- Create page: {action: "create", title: "Meeting Notes", parent_id: "xxx", content: "# Agenda\n- Item 1\n- Item 2"}
|
|
32
|
-
- Create in database: {action: "create", title: "Task", parent_id: "db-id", properties: {Status: "Todo", Priority: "High"}}
|
|
33
|
-
- Get with content: {action: "get", page_id: "xxx"} → Returns markdown content
|
|
34
|
-
- Update content: {action: "update", page_id: "xxx", append_content: "\n## New Section"}
|
|
35
|
-
- Update metadata: {action: "update", page_id: "xxx", icon: "", cover: "https://..."}
|
|
36
|
-
- Archive: {action: "archive", page_ids: ["xxx", "yyy"]}
|
|
37
|
-
- Restore: {action: "restore", page_id: "xxx"}
|
|
38
|
-
- Duplicate: {action: "duplicate", page_id: "xxx"}`,
|
|
42
|
+
description: 'Page lifecycle: create, get, update, archive, restore, duplicate. Requires parent_id for create. Returns markdown content for get.',
|
|
39
43
|
inputSchema: {
|
|
40
44
|
type: 'object',
|
|
41
45
|
properties: {
|
|
@@ -61,31 +65,7 @@ Examples:
|
|
|
61
65
|
},
|
|
62
66
|
{
|
|
63
67
|
name: 'databases',
|
|
64
|
-
description:
|
|
65
|
-
|
|
66
|
-
**ARCHITECTURE NOTE:**
|
|
67
|
-
Notion databases now support multiple data sources. A database is a container that holds one or more data sources. Each data source has its own schema (properties) and rows (pages).
|
|
68
|
-
|
|
69
|
-
**WORKFLOW:**
|
|
70
|
-
1. Create database → Creates database container + initial data source
|
|
71
|
-
2. Get database → Retrieves data_source_id for querying
|
|
72
|
-
3. Query/Create/Update pages → Use data_source_id (auto-fetched from database_id)
|
|
73
|
-
|
|
74
|
-
Actions: create, get, query, create_page, update_page, delete_page, create_data_source, update_data_source, update_database.
|
|
75
|
-
|
|
76
|
-
Maps to: /v1/databases + /v1/data_sources + /v1/pages
|
|
77
|
-
|
|
78
|
-
Examples:
|
|
79
|
-
- Create DB+datasource: {action: "create", parent_id: "xxx", title: "Tasks", properties: {Status: {select: {options: [{name: "Todo"}, {name: "Done"}]}}}}
|
|
80
|
-
- Get schema: {action: "get", database_id: "xxx"} → Returns data_source info
|
|
81
|
-
- Query data: {action: "query", database_id: "xxx", filters: {property: "Status", select: {equals: "Done"}}}
|
|
82
|
-
- Smart search: {action: "query", database_id: "xxx", search: "project"}
|
|
83
|
-
- Create rows: {action: "create_page", database_id: "xxx", pages: [{properties: {Name: "Task 1", Status: "Todo"}}]}
|
|
84
|
-
- Update rows: {action: "update_page", page_id: "yyy", page_properties: {Status: "Done"}}
|
|
85
|
-
- Delete rows: {action: "delete_page", page_ids: ["yyy", "zzz"]}
|
|
86
|
-
- Add 2nd datasource: {action: "create_data_source", database_id: "xxx", title: "Archive", properties: {...}}
|
|
87
|
-
- Update datasource schema: {action: "update_data_source", data_source_id: "yyy", properties: {NewField: {checkbox: {}}}}
|
|
88
|
-
- Move database: {action: "update_database", database_id: "xxx", parent_id: "new-page-id"}`,
|
|
68
|
+
description: 'Database operations: create, get, query, create_page, update_page, delete_page, create_data_source, update_data_source, update_database. Databases contain data sources with schema and rows.',
|
|
89
69
|
inputSchema: {
|
|
90
70
|
type: 'object',
|
|
91
71
|
properties: {
|
|
@@ -127,21 +107,7 @@ Examples:
|
|
|
127
107
|
},
|
|
128
108
|
{
|
|
129
109
|
name: 'blocks',
|
|
130
|
-
description:
|
|
131
|
-
|
|
132
|
-
**When to use:** Editing specific paragraphs, headings, or sections. For full page content, use pages tool.
|
|
133
|
-
**Block ID:** Page IDs are also valid block IDs (page is the root block).
|
|
134
|
-
|
|
135
|
-
Actions: get, children, append, update, delete.
|
|
136
|
-
|
|
137
|
-
Maps to: GET/PATCH/DELETE /v1/blocks/{id} + /v1/blocks/{id}/children
|
|
138
|
-
|
|
139
|
-
Examples:
|
|
140
|
-
- Get block info: {action: "get", block_id: "xxx"}
|
|
141
|
-
- Read content: {action: "children", block_id: "xxx"} → Returns markdown of child blocks
|
|
142
|
-
- Add content: {action: "append", block_id: "page-id", content: "## New Section\nParagraph text"}
|
|
143
|
-
- Edit paragraph: {action: "update", block_id: "block-id", content: "Updated text"}
|
|
144
|
-
- Remove block: {action: "delete", block_id: "block-id"}`,
|
|
110
|
+
description: 'Block-level content: get, children, append, update, delete. Page IDs are valid block IDs. Use for precise edits.',
|
|
145
111
|
inputSchema: {
|
|
146
112
|
type: 'object',
|
|
147
113
|
properties: {
|
|
@@ -158,19 +124,7 @@ Examples:
|
|
|
158
124
|
},
|
|
159
125
|
{
|
|
160
126
|
name: 'users',
|
|
161
|
-
description:
|
|
162
|
-
|
|
163
|
-
**PERMISSION NOTE:** list action may fail if integration lacks user read permissions. Use from_workspace as fallback - it extracts user IDs from accessible pages' metadata.
|
|
164
|
-
|
|
165
|
-
Actions: list, get, me, from_workspace.
|
|
166
|
-
|
|
167
|
-
Maps to: GET /v1/users + GET /v1/users/{id} + GET /v1/users/me
|
|
168
|
-
|
|
169
|
-
Examples:
|
|
170
|
-
- Get bot details: {action: "me"} → Integration info
|
|
171
|
-
- List all users: {action: "list"} → Requires user:read permission
|
|
172
|
-
- Get specific user: {action: "get", user_id: "xxx"}
|
|
173
|
-
- Bypass permissions: {action: "from_workspace"} → Extracts users from page metadata (created_by, last_edited_by)`,
|
|
127
|
+
description: 'User info: list, get, me, from_workspace. Use from_workspace if list fails due to permissions.',
|
|
174
128
|
inputSchema: {
|
|
175
129
|
type: 'object',
|
|
176
130
|
properties: {
|
|
@@ -186,19 +140,7 @@ Examples:
|
|
|
186
140
|
},
|
|
187
141
|
{
|
|
188
142
|
name: 'workspace',
|
|
189
|
-
description:
|
|
190
|
-
|
|
191
|
-
**Search:** Searches page/database titles. In API 2025-09-03, use filter object "data_source" to find databases. Returns only accessible content (shared with integration).
|
|
192
|
-
|
|
193
|
-
Actions: info, search.
|
|
194
|
-
|
|
195
|
-
Maps to: GET /v1/users/me + POST /v1/search
|
|
196
|
-
|
|
197
|
-
Examples:
|
|
198
|
-
- Get workspace info: {action: "info"} → Bot owner, workspace details
|
|
199
|
-
- Search pages: {action: "search", query: "meeting notes", filter: {object: "page"}, limit: 10}
|
|
200
|
-
- Search databases: {action: "search", query: "tasks", filter: {object: "data_source"}}
|
|
201
|
-
- Sort results: {action: "search", query: "project", sort: {direction: "ascending", timestamp: "last_edited_time"}}`,
|
|
143
|
+
description: 'Workspace: info, search. Search returns pages/databases shared with integration. Use filter.object for type.',
|
|
202
144
|
inputSchema: {
|
|
203
145
|
type: 'object',
|
|
204
146
|
properties: {
|
|
@@ -228,18 +170,7 @@ Examples:
|
|
|
228
170
|
},
|
|
229
171
|
{
|
|
230
172
|
name: 'comments',
|
|
231
|
-
description:
|
|
232
|
-
|
|
233
|
-
**Threading:** Use page_id for new discussion. Use discussion_id (from list response) to reply to existing thread.
|
|
234
|
-
|
|
235
|
-
Actions: list, create.
|
|
236
|
-
|
|
237
|
-
Maps to: GET /v1/comments + POST /v1/comments
|
|
238
|
-
|
|
239
|
-
Examples:
|
|
240
|
-
- List page comments: {action: "list", page_id: "xxx"}
|
|
241
|
-
- Start discussion: {action: "create", page_id: "xxx", content: "Great work on this page!"}
|
|
242
|
-
- Reply to thread: {action: "create", discussion_id: "thread-id", content: "I agree with your points"}`,
|
|
173
|
+
description: 'Comments: list, create. Use page_id for new discussion, discussion_id for replies.',
|
|
243
174
|
inputSchema: {
|
|
244
175
|
type: 'object',
|
|
245
176
|
properties: {
|
|
@@ -253,18 +184,7 @@ Examples:
|
|
|
253
184
|
},
|
|
254
185
|
{
|
|
255
186
|
name: 'content_convert',
|
|
256
|
-
description:
|
|
257
|
-
|
|
258
|
-
**Use cases:**
|
|
259
|
-
- Preview Notion blocks as Markdown before appending
|
|
260
|
-
- Test block structure from Markdown input
|
|
261
|
-
- Debug block formatting issues
|
|
262
|
-
|
|
263
|
-
**Note:** Most operations (pages, blocks) handle Markdown automatically. Use this for advanced preview/validation.
|
|
264
|
-
|
|
265
|
-
Examples:
|
|
266
|
-
- Parse Markdown: {direction: "markdown-to-blocks", content: "# Heading\nParagraph text\n- List item"}
|
|
267
|
-
- Read blocks: {direction: "blocks-to-markdown", content: [{"type": "paragraph", "paragraph": {...}}]}`,
|
|
187
|
+
description: 'Convert: markdown-to-blocks, blocks-to-markdown. Most tools handle markdown automatically.',
|
|
268
188
|
inputSchema: {
|
|
269
189
|
type: 'object',
|
|
270
190
|
properties: {
|
|
@@ -277,6 +197,21 @@ Examples:
|
|
|
277
197
|
},
|
|
278
198
|
required: ['direction', 'content']
|
|
279
199
|
}
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'help',
|
|
203
|
+
description: 'Get full documentation for a tool. Use when compressed descriptions are insufficient.',
|
|
204
|
+
inputSchema: {
|
|
205
|
+
type: 'object',
|
|
206
|
+
properties: {
|
|
207
|
+
tool_name: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
enum: ['pages', 'databases', 'blocks', 'users', 'workspace', 'comments', 'content_convert'],
|
|
210
|
+
description: 'Tool to get documentation for'
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
required: ['tool_name']
|
|
214
|
+
}
|
|
280
215
|
}
|
|
281
216
|
];
|
|
282
217
|
/**
|
|
@@ -290,6 +225,25 @@ export function registerTools(server, notionToken) {
|
|
|
290
225
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
291
226
|
tools: TOOLS
|
|
292
227
|
}));
|
|
228
|
+
// Resources handlers for full documentation
|
|
229
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
230
|
+
resources: RESOURCES.map((r) => ({
|
|
231
|
+
uri: r.uri,
|
|
232
|
+
name: r.name,
|
|
233
|
+
mimeType: 'text/markdown'
|
|
234
|
+
}))
|
|
235
|
+
}));
|
|
236
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
237
|
+
const { uri } = request.params;
|
|
238
|
+
const resource = RESOURCES.find((r) => r.uri === uri);
|
|
239
|
+
if (!resource) {
|
|
240
|
+
throw new NotionMCPError(`Resource not found: ${uri}`, 'RESOURCE_NOT_FOUND', `Available: ${RESOURCES.map((r) => r.uri).join(', ')}`);
|
|
241
|
+
}
|
|
242
|
+
const content = readFileSync(join(DOCS_DIR, resource.file), 'utf-8');
|
|
243
|
+
return {
|
|
244
|
+
contents: [{ uri, mimeType: 'text/markdown', text: content }]
|
|
245
|
+
};
|
|
246
|
+
});
|
|
293
247
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
294
248
|
const { name, arguments: args } = request.params;
|
|
295
249
|
if (!args) {
|
|
@@ -327,6 +281,18 @@ export function registerTools(server, notionToken) {
|
|
|
327
281
|
case 'content_convert':
|
|
328
282
|
result = await contentConvert(args);
|
|
329
283
|
break;
|
|
284
|
+
case 'help': {
|
|
285
|
+
const toolName = args.tool_name;
|
|
286
|
+
const docFile = `${toolName}.md`;
|
|
287
|
+
try {
|
|
288
|
+
const content = readFileSync(join(DOCS_DIR, docFile), 'utf-8');
|
|
289
|
+
result = { tool: toolName, documentation: content };
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
throw new NotionMCPError(`Documentation not found for: ${toolName}`, 'DOC_NOT_FOUND', 'Check tool_name');
|
|
293
|
+
}
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
330
296
|
default:
|
|
331
297
|
throw new NotionMCPError(`Unknown tool: ${name}`, 'UNKNOWN_TOOL', `Available tools: ${TOOLS.map((t) => t.name).join(', ')}`);
|
|
332
298
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|