@atikk-co-jp/notion-mcp-server 0.4.0 → 0.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.ja.md +53 -12
- package/README.md +53 -12
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/notion-client.d.ts +24 -10
- package/dist/src/notion-client.d.ts.map +1 -1
- package/dist/src/notion-client.js +48 -11
- package/dist/src/schemas/block.d.ts +2 -1
- package/dist/src/schemas/block.d.ts.map +1 -1
- package/dist/src/tools/archive-database.d.ts +4 -0
- package/dist/src/tools/archive-database.d.ts.map +1 -0
- package/dist/src/tools/archive-database.js +23 -0
- package/dist/src/tools/archive-page.d.ts +4 -0
- package/dist/src/tools/archive-page.d.ts.map +1 -0
- package/dist/src/tools/archive-page.js +23 -0
- package/dist/src/tools/create-database.js +3 -3
- package/dist/src/tools/create-page-simple.d.ts.map +1 -1
- package/dist/src/tools/create-page-simple.js +6 -5
- package/dist/src/tools/create-page.js +6 -6
- package/dist/src/tools/index.d.ts +6 -2
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +12 -3
- package/dist/src/tools/move-page.d.ts.map +1 -1
- package/dist/src/tools/move-page.js +8 -7
- package/dist/src/tools/query-data-source.d.ts +4 -0
- package/dist/src/tools/query-data-source.d.ts.map +1 -0
- package/dist/src/tools/{query-database.js → query-data-source.js} +9 -7
- package/dist/src/tools/retrieve-data-source.d.ts +4 -0
- package/dist/src/tools/retrieve-data-source.d.ts.map +1 -0
- package/dist/src/tools/retrieve-data-source.js +55 -0
- package/dist/src/tools/retrieve-database.d.ts.map +1 -1
- package/dist/src/tools/retrieve-database.js +7 -24
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.js +6 -5
- package/dist/src/tools/update-data-source.d.ts +4 -0
- package/dist/src/tools/update-data-source.d.ts.map +1 -0
- package/dist/src/tools/update-data-source.js +31 -0
- package/dist/src/tools/update-database.d.ts.map +1 -1
- package/dist/src/tools/update-database.js +5 -8
- package/dist/src/tools/update-page.js +1 -1
- package/package.json +1 -1
- package/dist/src/tools/query-database.d.ts +0 -4
- package/dist/src/tools/query-database.d.ts.map +0 -1
|
@@ -7,7 +7,7 @@ const inputSchema = {
|
|
|
7
7
|
properties: z
|
|
8
8
|
.record(z.string(), z.any())
|
|
9
9
|
.describe('Property schema (must include one title property)'),
|
|
10
|
-
icon: z.any().optional().describe('Database icon'),
|
|
10
|
+
icon: z.any().optional().describe('Database icon { type: "emoji", emoji: "📝" } or { type: "external", external: { url: "..." } }. Emoji must be an actual emoji character.'),
|
|
11
11
|
cover: z.any().optional().describe('Cover image'),
|
|
12
12
|
is_inline: z.boolean().optional().describe('Inline database'),
|
|
13
13
|
};
|
|
@@ -15,13 +15,13 @@ export function registerCreateDatabase(server, notion) {
|
|
|
15
15
|
server.registerTool('create-database', {
|
|
16
16
|
description: 'Create a new database as a subpage of an existing Notion page. ' +
|
|
17
17
|
'Requires a parent_page_id and properties object defining the database schema. ' +
|
|
18
|
-
'Each database must have exactly one title property.',
|
|
18
|
+
'Each database must have exactly one title property. (API version 2025-09-03)',
|
|
19
19
|
inputSchema,
|
|
20
20
|
}, async ({ parent_page_id, title, properties, icon, cover, is_inline }) => {
|
|
21
21
|
try {
|
|
22
22
|
const params = {
|
|
23
23
|
parent: { page_id: parent_page_id },
|
|
24
|
-
properties: properties,
|
|
24
|
+
initial_data_source: { properties: properties },
|
|
25
25
|
};
|
|
26
26
|
if (title) {
|
|
27
27
|
params.title = title;
|
|
@@ -1 +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,
|
|
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,CA4DtF"}
|
|
@@ -3,19 +3,20 @@ import { markdownToBlocks } from '../converters/index.js';
|
|
|
3
3
|
import { formatResponse, handleError } from '../utils/index.js';
|
|
4
4
|
// Minimal schema for MCP
|
|
5
5
|
const inputSchema = {
|
|
6
|
-
|
|
6
|
+
data_source_id: z.string().describe('Data source ID (required in API 2025-09-03)'),
|
|
7
7
|
title: z.string().describe('Page title'),
|
|
8
8
|
content: z.string().optional().describe('Page content in Markdown'),
|
|
9
9
|
properties: z.record(z.string(), z.any()).optional().describe('Additional properties'),
|
|
10
|
-
icon: z.string().optional().describe('Emoji
|
|
10
|
+
icon: z.string().optional().describe('Emoji character (e.g. "📝", "🐛", "✅"). Must be an actual emoji, not a name.'),
|
|
11
11
|
};
|
|
12
12
|
export function registerCreatePageSimple(server, notion) {
|
|
13
13
|
server.registerTool('create-page-simple', {
|
|
14
14
|
description: 'Create a Notion page with Markdown content. ' +
|
|
15
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.'
|
|
16
|
+
'Supports: headings (#), lists (- or 1.), checkboxes (- [ ]), code blocks (```), quotes (>), images (![]()), bold (**), italic (*), links ([]()), etc. ' +
|
|
17
|
+
'(API version 2025-09-03)',
|
|
17
18
|
inputSchema,
|
|
18
|
-
}, async ({
|
|
19
|
+
}, async ({ data_source_id, title, content, properties, icon }) => {
|
|
19
20
|
try {
|
|
20
21
|
// Build properties with title
|
|
21
22
|
const pageProperties = {
|
|
@@ -32,7 +33,7 @@ export function registerCreatePageSimple(server, notion) {
|
|
|
32
33
|
}
|
|
33
34
|
// Build params
|
|
34
35
|
const params = {
|
|
35
|
-
parent: {
|
|
36
|
+
parent: { data_source_id },
|
|
36
37
|
properties: pageProperties,
|
|
37
38
|
};
|
|
38
39
|
// Convert markdown to blocks if content provided
|
|
@@ -2,22 +2,22 @@ import { z } from 'zod';
|
|
|
2
2
|
import { formatResponse, handleError } from '../utils/index.js';
|
|
3
3
|
// Minimal schema for MCP (full validation by Notion API)
|
|
4
4
|
const inputSchema = {
|
|
5
|
-
|
|
5
|
+
data_source_id: z.string().describe('Data source ID (required in API 2025-09-03)'),
|
|
6
6
|
properties: z.record(z.string(), z.any()).describe('Notion properties object'),
|
|
7
7
|
children: z.array(z.any()).optional().describe('Block objects array'),
|
|
8
|
-
icon: z.any().optional().describe('Page icon'),
|
|
8
|
+
icon: z.any().optional().describe('Page icon { type: "emoji", emoji: "📝" } or { type: "external", external: { url: "..." } }. Emoji must be an actual emoji character.'),
|
|
9
9
|
cover: z.any().optional().describe('Cover image'),
|
|
10
10
|
};
|
|
11
11
|
export function registerCreatePage(server, notion) {
|
|
12
12
|
server.registerTool('create-page', {
|
|
13
|
-
description: 'Create a new page in a Notion
|
|
13
|
+
description: 'Create a new page in a Notion data source. Requires a data_source_id and properties object. ' +
|
|
14
14
|
'Optionally include initial content blocks, icon, and cover image. ' +
|
|
15
|
-
'Returns the created page with its ID and URL.',
|
|
15
|
+
'Returns the created page with its ID and URL. (API version 2025-09-03)',
|
|
16
16
|
inputSchema,
|
|
17
|
-
}, async ({
|
|
17
|
+
}, async ({ data_source_id, properties, children, icon, cover }) => {
|
|
18
18
|
try {
|
|
19
19
|
const params = {
|
|
20
|
-
parent: {
|
|
20
|
+
parent: { data_source_id },
|
|
21
21
|
properties: properties,
|
|
22
22
|
};
|
|
23
23
|
if (children) {
|
|
@@ -2,6 +2,8 @@ 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
4
|
import { registerAppendBlocksSimple } from './append-blocks-simple.js';
|
|
5
|
+
import { registerArchiveDatabase } from './archive-database.js';
|
|
6
|
+
import { registerArchivePage } from './archive-page.js';
|
|
5
7
|
import { registerCreateComment } from './create-comment.js';
|
|
6
8
|
import { registerCreateDatabase } from './create-database.js';
|
|
7
9
|
import { registerCreatePage } from './create-page.js';
|
|
@@ -11,10 +13,11 @@ import { registerGetBlockChildren } from './get-block-children.js';
|
|
|
11
13
|
import { registerListComments } from './list-comments.js';
|
|
12
14
|
import { registerListUsers } from './list-users.js';
|
|
13
15
|
import { registerMovePage } from './move-page.js';
|
|
14
|
-
import {
|
|
16
|
+
import { registerQueryDataSource } from './query-data-source.js';
|
|
15
17
|
import { registerRetrieveBlock } from './retrieve-block.js';
|
|
16
18
|
import { registerRetrieveBotUser } from './retrieve-bot-user.js';
|
|
17
19
|
import { registerRetrieveDatabase } from './retrieve-database.js';
|
|
20
|
+
import { registerRetrieveDataSource } from './retrieve-data-source.js';
|
|
18
21
|
import { registerRetrievePage } from './retrieve-page.js';
|
|
19
22
|
import { registerRetrievePageProperty } from './retrieve-page-property.js';
|
|
20
23
|
import { registerRetrieveUser } from './retrieve-user.js';
|
|
@@ -22,7 +25,8 @@ import { registerSearch } from './search.js';
|
|
|
22
25
|
import { registerUpdateBlock } from './update-block.js';
|
|
23
26
|
import { registerUpdateBlockSimple } from './update-block-simple.js';
|
|
24
27
|
import { registerUpdateDatabase } from './update-database.js';
|
|
28
|
+
import { registerUpdateDataSource } from './update-data-source.js';
|
|
25
29
|
import { registerUpdatePage } from './update-page.js';
|
|
26
30
|
export declare function registerAllTools(server: McpServer, notion: NotionClient): void;
|
|
27
|
-
export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase,
|
|
31
|
+
export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerArchivePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase, registerArchiveDatabase, registerRetrieveDatabase, registerRetrieveDataSource, registerQueryDataSource, registerUpdateDataSource, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerAppendBlocksSimple, registerRetrieveBlock, registerUpdateBlock, registerUpdateBlockSimple, registerDeleteBlock, registerCreateComment, registerListComments, registerListUsers, registerRetrieveUser, registerRetrieveBotUser, };
|
|
28
32
|
//# 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,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,
|
|
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,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,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,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,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,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,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,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAyC9E;AAED,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,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"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { registerAppendBlockChildren } from './append-block-children.js';
|
|
2
2
|
import { registerAppendBlocksSimple } from './append-blocks-simple.js';
|
|
3
|
+
import { registerArchiveDatabase } from './archive-database.js';
|
|
4
|
+
import { registerArchivePage } from './archive-page.js';
|
|
3
5
|
import { registerCreateComment } from './create-comment.js';
|
|
4
6
|
import { registerCreateDatabase } from './create-database.js';
|
|
5
7
|
import { registerCreatePage } from './create-page.js';
|
|
@@ -9,10 +11,11 @@ import { registerGetBlockChildren } from './get-block-children.js';
|
|
|
9
11
|
import { registerListComments } from './list-comments.js';
|
|
10
12
|
import { registerListUsers } from './list-users.js';
|
|
11
13
|
import { registerMovePage } from './move-page.js';
|
|
12
|
-
import {
|
|
14
|
+
import { registerQueryDataSource } from './query-data-source.js';
|
|
13
15
|
import { registerRetrieveBlock } from './retrieve-block.js';
|
|
14
16
|
import { registerRetrieveBotUser } from './retrieve-bot-user.js';
|
|
15
17
|
import { registerRetrieveDatabase } from './retrieve-database.js';
|
|
18
|
+
import { registerRetrieveDataSource } from './retrieve-data-source.js';
|
|
16
19
|
import { registerRetrievePage } from './retrieve-page.js';
|
|
17
20
|
import { registerRetrievePageProperty } from './retrieve-page-property.js';
|
|
18
21
|
import { registerRetrieveUser } from './retrieve-user.js';
|
|
@@ -20,6 +23,7 @@ import { registerSearch } from './search.js';
|
|
|
20
23
|
import { registerUpdateBlock } from './update-block.js';
|
|
21
24
|
import { registerUpdateBlockSimple } from './update-block-simple.js';
|
|
22
25
|
import { registerUpdateDatabase } from './update-database.js';
|
|
26
|
+
import { registerUpdateDataSource } from './update-data-source.js';
|
|
23
27
|
import { registerUpdatePage } from './update-page.js';
|
|
24
28
|
export function registerAllTools(server, notion) {
|
|
25
29
|
// Page operations
|
|
@@ -27,13 +31,18 @@ export function registerAllTools(server, notion) {
|
|
|
27
31
|
registerCreatePage(server, notion);
|
|
28
32
|
registerCreatePageSimple(server, notion);
|
|
29
33
|
registerUpdatePage(server, notion);
|
|
34
|
+
registerArchivePage(server, notion);
|
|
30
35
|
registerRetrievePageProperty(server, notion);
|
|
31
36
|
registerMovePage(server, notion);
|
|
32
37
|
// Database operations
|
|
33
38
|
registerCreateDatabase(server, notion);
|
|
34
39
|
registerUpdateDatabase(server, notion);
|
|
35
|
-
|
|
40
|
+
registerArchiveDatabase(server, notion);
|
|
36
41
|
registerRetrieveDatabase(server, notion);
|
|
42
|
+
// Data Source operations (API 2025-09-03)
|
|
43
|
+
registerRetrieveDataSource(server, notion);
|
|
44
|
+
registerQueryDataSource(server, notion);
|
|
45
|
+
registerUpdateDataSource(server, notion);
|
|
37
46
|
// Search
|
|
38
47
|
registerSearch(server, notion);
|
|
39
48
|
// Block operations
|
|
@@ -52,4 +61,4 @@ export function registerAllTools(server, notion) {
|
|
|
52
61
|
registerRetrieveUser(server, notion);
|
|
53
62
|
registerRetrieveBotUser(server, notion);
|
|
54
63
|
}
|
|
55
|
-
export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase,
|
|
64
|
+
export { registerRetrievePage, registerCreatePage, registerCreatePageSimple, registerUpdatePage, registerArchivePage, registerRetrievePageProperty, registerMovePage, registerCreateDatabase, registerUpdateDatabase, registerArchiveDatabase, registerRetrieveDatabase, registerRetrieveDataSource, registerQueryDataSource, registerUpdateDataSource, registerSearch, registerGetBlockChildren, registerAppendBlockChildren, registerAppendBlocksSimple, registerRetrieveBlock, registerUpdateBlock, registerUpdateBlockSimple, registerDeleteBlock, registerCreateComment, registerListComments, registerListUsers, registerRetrieveUser, registerRetrieveBotUser, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-page.d.ts","sourceRoot":"","sources":["../../../src/tools/move-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAavD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"move-page.d.ts","sourceRoot":"","sources":["../../../src/tools/move-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAavD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAuC9E"}
|
|
@@ -5,23 +5,24 @@ const inputSchema = {
|
|
|
5
5
|
parent: z
|
|
6
6
|
.object({
|
|
7
7
|
page_id: z.string().optional().describe('Target parent page ID'),
|
|
8
|
-
|
|
8
|
+
data_source_id: z.string().optional().describe('Target data source ID'),
|
|
9
9
|
})
|
|
10
|
-
.describe('New parent (provide either page_id or
|
|
10
|
+
.describe('New parent (provide either page_id or data_source_id)'),
|
|
11
11
|
};
|
|
12
12
|
export function registerMovePage(server, notion) {
|
|
13
13
|
server.registerTool('move-page', {
|
|
14
|
-
description: 'Move a page to a new parent (page or
|
|
15
|
-
'Provide either page_id or
|
|
14
|
+
description: 'Move a page to a new parent (page or data source). ' +
|
|
15
|
+
'Provide either page_id or data_source_id as the new parent. ' +
|
|
16
|
+
'(API version 2025-09-03)',
|
|
16
17
|
inputSchema,
|
|
17
18
|
}, async ({ page_id, parent }) => {
|
|
18
19
|
try {
|
|
19
|
-
if (!parent.page_id && !parent.
|
|
20
|
+
if (!parent.page_id && !parent.data_source_id) {
|
|
20
21
|
return {
|
|
21
22
|
content: [
|
|
22
23
|
{
|
|
23
24
|
type: 'text',
|
|
24
|
-
text: 'Error: Parent must have either page_id or
|
|
25
|
+
text: 'Error: Parent must have either page_id or data_source_id.',
|
|
25
26
|
},
|
|
26
27
|
],
|
|
27
28
|
isError: true,
|
|
@@ -29,7 +30,7 @@ export function registerMovePage(server, notion) {
|
|
|
29
30
|
}
|
|
30
31
|
const parentParam = parent.page_id
|
|
31
32
|
? { page_id: parent.page_id }
|
|
32
|
-
: {
|
|
33
|
+
: { data_source_id: parent.data_source_id };
|
|
33
34
|
const response = await notion.pages.move({
|
|
34
35
|
page_id,
|
|
35
36
|
parent: parentParam,
|
|
@@ -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 registerQueryDataSource(server: McpServer, notion: NotionClient): void;
|
|
4
|
+
//# sourceMappingURL=query-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-data-source.d.ts","sourceRoot":"","sources":["../../../src/tools/query-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA8BvD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAsDrF"}
|
|
@@ -3,20 +3,22 @@ import { pagesToSimple } from '../converters/index.js';
|
|
|
3
3
|
import { formatPaginatedResponse, formatSimplePaginatedResponse, handleError, } from '../utils/index.js';
|
|
4
4
|
// Minimal schema for MCP (full validation by Notion API)
|
|
5
5
|
const inputSchema = {
|
|
6
|
-
|
|
6
|
+
data_source_id: z.string().describe('Data source ID'),
|
|
7
7
|
filter: z.any().optional().describe('Filter conditions'),
|
|
8
8
|
sorts: z.array(z.any()).optional().describe('Sort conditions'),
|
|
9
9
|
start_cursor: z.string().optional().describe('Pagination cursor'),
|
|
10
10
|
page_size: z.number().optional().describe('Results per page (1-100)'),
|
|
11
11
|
format: z.enum(['json', 'simple']).optional().describe('Output format (default: simple)'),
|
|
12
12
|
};
|
|
13
|
-
export function
|
|
14
|
-
server.registerTool('query-
|
|
15
|
-
description:
|
|
13
|
+
export function registerQueryDataSource(server, notion) {
|
|
14
|
+
server.registerTool('query-data-source', {
|
|
15
|
+
description: 'Query a Notion data source with optional filters and sorts. Returns paginated results. ' +
|
|
16
|
+
"Use format='simple' (default) for human-readable output with reduced token usage. " +
|
|
17
|
+
'(API version 2025-09-03)',
|
|
16
18
|
inputSchema,
|
|
17
|
-
}, async ({
|
|
19
|
+
}, async ({ data_source_id, filter, sorts, start_cursor, page_size, format }) => {
|
|
18
20
|
try {
|
|
19
|
-
const params = {
|
|
21
|
+
const params = { data_source_id };
|
|
20
22
|
if (filter) {
|
|
21
23
|
params.filter = filter;
|
|
22
24
|
}
|
|
@@ -30,7 +32,7 @@ export function registerQueryDatabase(server, notion) {
|
|
|
30
32
|
params.page_size = page_size;
|
|
31
33
|
}
|
|
32
34
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
-
const response = await notion.
|
|
35
|
+
const response = await notion.dataSources.query(params);
|
|
34
36
|
if (format === 'simple') {
|
|
35
37
|
const simplePages = pagesToSimple(response.results);
|
|
36
38
|
return formatSimplePaginatedResponse(simplePages, response.has_more, response.next_cursor);
|
|
@@ -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 registerRetrieveDataSource(server: McpServer, notion: NotionClient): void;
|
|
4
|
+
//# sourceMappingURL=retrieve-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieve-data-source.d.ts","sourceRoot":"","sources":["../../../src/tools/retrieve-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA2BvD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAwDxF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { formatResponse, formatSimpleResponse, handleError } from '../utils/index.js';
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
data_source_id: z.string().describe('Data source ID'),
|
|
5
|
+
format: z
|
|
6
|
+
.enum(['json', 'simple'])
|
|
7
|
+
.optional()
|
|
8
|
+
.describe("Output format: 'simple' (default) or 'json'"),
|
|
9
|
+
};
|
|
10
|
+
export function registerRetrieveDataSource(server, notion) {
|
|
11
|
+
server.registerTool('retrieve-data-source', {
|
|
12
|
+
description: 'Retrieve a data source schema by its ID. Returns data source properties (columns) and their types. ' +
|
|
13
|
+
"Use format='simple' (default) for reduced token usage, 'json' for full Notion API response. " +
|
|
14
|
+
'(API version 2025-09-03)',
|
|
15
|
+
inputSchema,
|
|
16
|
+
}, async ({ data_source_id, format = 'simple' }) => {
|
|
17
|
+
try {
|
|
18
|
+
const response = await notion.dataSources.retrieve({ data_source_id });
|
|
19
|
+
if (format === 'json') {
|
|
20
|
+
return formatResponse(response);
|
|
21
|
+
}
|
|
22
|
+
// Simple format: extract essential info
|
|
23
|
+
const simpleProperties = {};
|
|
24
|
+
for (const [name, prop] of Object.entries(response.properties)) {
|
|
25
|
+
const simpleProp = {
|
|
26
|
+
id: prop.id,
|
|
27
|
+
type: prop.type,
|
|
28
|
+
};
|
|
29
|
+
// Include options for select/multi_select/status
|
|
30
|
+
if (prop.type === 'select' && prop.select) {
|
|
31
|
+
const selectProp = prop.select;
|
|
32
|
+
simpleProp.options = selectProp.options;
|
|
33
|
+
}
|
|
34
|
+
else if (prop.type === 'multi_select' && prop.multi_select) {
|
|
35
|
+
const multiSelectProp = prop.multi_select;
|
|
36
|
+
simpleProp.options = multiSelectProp.options;
|
|
37
|
+
}
|
|
38
|
+
else if (prop.type === 'status' && prop.status) {
|
|
39
|
+
const statusProp = prop.status;
|
|
40
|
+
simpleProp.options = statusProp.options;
|
|
41
|
+
}
|
|
42
|
+
simpleProperties[name] = simpleProp;
|
|
43
|
+
}
|
|
44
|
+
const simpleResponse = {
|
|
45
|
+
id: response.id,
|
|
46
|
+
parent_database_id: response.parent.database_id,
|
|
47
|
+
properties: simpleProperties,
|
|
48
|
+
};
|
|
49
|
+
return formatSimpleResponse(simpleResponse);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return handleError(error);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieve-database.d.ts","sourceRoot":"","sources":["../../../src/tools/retrieve-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"retrieve-database.d.ts","sourceRoot":"","sources":["../../../src/tools/retrieve-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA+BvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAsCtF"}
|
|
@@ -9,7 +9,8 @@ const inputSchema = {
|
|
|
9
9
|
};
|
|
10
10
|
export function registerRetrieveDatabase(server, notion) {
|
|
11
11
|
server.registerTool('retrieve-database', {
|
|
12
|
-
description: 'Retrieve a database
|
|
12
|
+
description: 'Retrieve a database container by its ID. Returns database metadata and associated data sources. ' +
|
|
13
|
+
'Note: In API 2025-09-03, database properties/schema are retrieved via retrieve-data-source using data_source_id. ' +
|
|
13
14
|
"Use format='simple' (default) for reduced token usage, 'json' for full Notion API response.",
|
|
14
15
|
inputSchema,
|
|
15
16
|
}, async ({ database_id, format = 'simple' }) => {
|
|
@@ -19,35 +20,17 @@ export function registerRetrieveDatabase(server, notion) {
|
|
|
19
20
|
return formatResponse(response);
|
|
20
21
|
}
|
|
21
22
|
// Simple format: extract essential info
|
|
22
|
-
const simpleProperties = {};
|
|
23
|
-
for (const [name, prop] of Object.entries(response.properties)) {
|
|
24
|
-
const simpleProp = {
|
|
25
|
-
id: prop.id,
|
|
26
|
-
type: prop.type,
|
|
27
|
-
};
|
|
28
|
-
// Include options for select/multi_select/status
|
|
29
|
-
if (prop.type === 'select' && prop.select) {
|
|
30
|
-
const selectProp = prop.select;
|
|
31
|
-
simpleProp.options = selectProp.options;
|
|
32
|
-
}
|
|
33
|
-
else if (prop.type === 'multi_select' && prop.multi_select) {
|
|
34
|
-
const multiSelectProp = prop.multi_select;
|
|
35
|
-
simpleProp.options = multiSelectProp.options;
|
|
36
|
-
}
|
|
37
|
-
else if (prop.type === 'status' && prop.status) {
|
|
38
|
-
const statusProp = prop.status;
|
|
39
|
-
simpleProp.options = statusProp.options;
|
|
40
|
-
}
|
|
41
|
-
simpleProperties[name] = simpleProp;
|
|
42
|
-
}
|
|
43
23
|
const simpleResponse = {
|
|
44
24
|
id: response.id,
|
|
45
25
|
title: response.title.map((t) => t.plain_text).join(''),
|
|
46
26
|
description: response.description.map((t) => t.plain_text).join(''),
|
|
47
27
|
url: response.url,
|
|
48
|
-
properties: simpleProperties,
|
|
49
28
|
is_inline: response.is_inline,
|
|
50
|
-
|
|
29
|
+
in_trash: response.in_trash,
|
|
30
|
+
data_sources: response.data_sources,
|
|
31
|
+
icon: response.icon,
|
|
32
|
+
created_time: response.created_time,
|
|
33
|
+
last_edited_time: response.last_edited_time,
|
|
51
34
|
};
|
|
52
35
|
return formatSimpleResponse(simpleResponse);
|
|
53
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA8CvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA8CvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAiD5E"}
|
package/dist/src/tools/search.js
CHANGED
|
@@ -4,11 +4,11 @@ const inputSchema = {
|
|
|
4
4
|
query: z.string().optional().describe('Text to search for in page titles and content'),
|
|
5
5
|
filter: z
|
|
6
6
|
.object({
|
|
7
|
-
value: z.enum(['page', '
|
|
7
|
+
value: z.enum(['page', 'data_source']),
|
|
8
8
|
property: z.literal('object'),
|
|
9
9
|
})
|
|
10
10
|
.optional()
|
|
11
|
-
.describe('Filter to limit results to pages or
|
|
11
|
+
.describe('Filter to limit results to pages or data sources. ' +
|
|
12
12
|
'Example: { "value": "page", "property": "object" }'),
|
|
13
13
|
sort: z
|
|
14
14
|
.object({
|
|
@@ -31,10 +31,11 @@ const inputSchema = {
|
|
|
31
31
|
};
|
|
32
32
|
export function registerSearch(server, notion) {
|
|
33
33
|
server.registerTool('search', {
|
|
34
|
-
description: 'Search across all pages and
|
|
35
|
-
'Filter results by type (page or
|
|
34
|
+
description: 'Search across all pages and data sources in the workspace by title and content. ' +
|
|
35
|
+
'Filter results by type (page or data_source) and sort by last edited time. ' +
|
|
36
36
|
'Returns paginated results. ' +
|
|
37
|
-
'For querying a specific
|
|
37
|
+
'For querying a specific data source with filters, use query-data-source instead. ' +
|
|
38
|
+
'(API version 2025-09-03)',
|
|
38
39
|
inputSchema,
|
|
39
40
|
}, async ({ query, filter, sort, start_cursor, page_size }) => {
|
|
40
41
|
try {
|
|
@@ -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 registerUpdateDataSource(server: McpServer, notion: NotionClient): void;
|
|
4
|
+
//# sourceMappingURL=update-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-data-source.d.ts","sourceRoot":"","sources":["../../../src/tools/update-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAYvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA6BtF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { formatResponse, handleError } from '../utils/index.js';
|
|
3
|
+
// Minimal schema for MCP (full validation by Notion API)
|
|
4
|
+
const inputSchema = {
|
|
5
|
+
data_source_id: z.string().describe('Data source ID'),
|
|
6
|
+
properties: z
|
|
7
|
+
.record(z.string(), z.any())
|
|
8
|
+
.optional()
|
|
9
|
+
.describe('Properties to add/update/delete (set to null to delete)'),
|
|
10
|
+
};
|
|
11
|
+
export function registerUpdateDataSource(server, notion) {
|
|
12
|
+
server.registerTool('update-data-source', {
|
|
13
|
+
description: 'Update a data source schema (properties/columns). ' +
|
|
14
|
+
'Use this to add, update, or delete properties. Set a property to null to delete it. ' +
|
|
15
|
+
'(API version 2025-09-03)',
|
|
16
|
+
inputSchema,
|
|
17
|
+
}, async ({ data_source_id, properties }) => {
|
|
18
|
+
try {
|
|
19
|
+
const params = { data_source_id };
|
|
20
|
+
if (properties !== undefined) {
|
|
21
|
+
params.properties = properties;
|
|
22
|
+
}
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
const response = await notion.dataSources.update(params);
|
|
25
|
+
return formatResponse(response);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return handleError(error);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-database.d.ts","sourceRoot":"","sources":["../../../src/tools/update-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,
|
|
1
|
+
{"version":3,"file":"update-database.d.ts","sourceRoot":"","sources":["../../../src/tools/update-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,CAuDpF"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { formatResponse, handleError } from '../utils/index.js';
|
|
3
3
|
// Minimal schema for MCP (full validation by Notion API)
|
|
4
|
+
// Note: Properties (schema) updates should use update-data-source in API 2025-09-03
|
|
4
5
|
const inputSchema = {
|
|
5
6
|
database_id: z.string().describe('Database ID'),
|
|
6
7
|
title: z.array(z.any()).optional().describe('New title'),
|
|
7
8
|
description: z.array(z.any()).optional().describe('New description'),
|
|
8
|
-
|
|
9
|
-
icon: z.any().optional().describe('Icon (null to remove)'),
|
|
9
|
+
icon: z.any().optional().describe('Icon object { type: "emoji", emoji: "📝" } or null to remove. Emoji must be an actual emoji character.'),
|
|
10
10
|
cover: z.any().optional().describe('Cover (null to remove)'),
|
|
11
11
|
is_inline: z.boolean().optional().describe('Inline database'),
|
|
12
12
|
archived: z.boolean().optional().describe('Archive status'),
|
|
13
13
|
};
|
|
14
14
|
export function registerUpdateDatabase(server, notion) {
|
|
15
15
|
server.registerTool('update-database', {
|
|
16
|
-
description: 'Update
|
|
17
|
-
'
|
|
16
|
+
description: 'Update a Notion database container. Can modify title, description, icon, cover, inline status, and archive status. ' +
|
|
17
|
+
'For schema (properties/columns) updates, use update-data-source instead. (API version 2025-09-03)',
|
|
18
18
|
inputSchema,
|
|
19
|
-
}, async ({ database_id, title, description,
|
|
19
|
+
}, async ({ database_id, title, description, icon, cover, is_inline, archived }) => {
|
|
20
20
|
try {
|
|
21
21
|
const params = {
|
|
22
22
|
database_id,
|
|
@@ -27,9 +27,6 @@ export function registerUpdateDatabase(server, notion) {
|
|
|
27
27
|
if (description !== undefined) {
|
|
28
28
|
params.description = description;
|
|
29
29
|
}
|
|
30
|
-
if (properties !== undefined) {
|
|
31
|
-
params.properties = properties;
|
|
32
|
-
}
|
|
33
30
|
if (icon !== undefined) {
|
|
34
31
|
params.icon = icon;
|
|
35
32
|
}
|
|
@@ -5,7 +5,7 @@ const inputSchema = {
|
|
|
5
5
|
page_id: z.string().describe('Page ID'),
|
|
6
6
|
properties: z.record(z.string(), z.any()).optional().describe('Properties to update'),
|
|
7
7
|
archived: z.boolean().optional().describe('Archive the page'),
|
|
8
|
-
icon: z.any().optional().describe('Page icon
|
|
8
|
+
icon: z.any().optional().describe('Page icon { type: "emoji", emoji: "📝" } or { type: "external", external: { url: "..." } }, or null to remove. Emoji must be an actual emoji character.'),
|
|
9
9
|
cover: z.any().optional().describe('Cover image (null to remove)'),
|
|
10
10
|
};
|
|
11
11
|
export function registerUpdatePage(server, notion) {
|
package/package.json
CHANGED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import type { NotionClient } from '../notion-client.js';
|
|
3
|
-
export declare function registerQueryDatabase(server: McpServer, notion: NotionClient): void;
|
|
4
|
-
//# sourceMappingURL=query-database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-database.d.ts","sourceRoot":"","sources":["../../../src/tools/query-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AA8BvD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAoDnF"}
|