@atikk-co-jp/notion-mcp-server 0.1.0 → 0.2.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 (97) hide show
  1. package/README.ja.md +95 -4
  2. package/README.md +95 -4
  3. package/dist/bin/cli.js +10 -10
  4. package/dist/src/converters/__tests__/block-to-markdown.test.d.ts +2 -0
  5. package/dist/src/converters/__tests__/block-to-markdown.test.d.ts.map +1 -0
  6. package/dist/src/converters/__tests__/block-to-markdown.test.js +611 -0
  7. package/dist/src/converters/__tests__/page-to-markdown.test.d.ts +2 -0
  8. package/dist/src/converters/__tests__/page-to-markdown.test.d.ts.map +1 -0
  9. package/dist/src/converters/__tests__/page-to-markdown.test.js +567 -0
  10. package/dist/src/converters/__tests__/rich-text-to-markdown.test.d.ts +2 -0
  11. package/dist/src/converters/__tests__/rich-text-to-markdown.test.d.ts.map +1 -0
  12. package/dist/src/converters/__tests__/rich-text-to-markdown.test.js +353 -0
  13. package/dist/src/converters/block-to-markdown.d.ts +38 -0
  14. package/dist/src/converters/block-to-markdown.d.ts.map +1 -0
  15. package/dist/src/converters/block-to-markdown.js +484 -0
  16. package/dist/src/converters/index.d.ts +9 -0
  17. package/dist/src/converters/index.d.ts.map +1 -0
  18. package/dist/src/converters/index.js +11 -0
  19. package/dist/src/converters/page-to-markdown.d.ts +64 -0
  20. package/dist/src/converters/page-to-markdown.d.ts.map +1 -0
  21. package/dist/src/converters/page-to-markdown.js +189 -0
  22. package/dist/src/converters/rich-text-to-markdown.d.ts +61 -0
  23. package/dist/src/converters/rich-text-to-markdown.d.ts.map +1 -0
  24. package/dist/src/converters/rich-text-to-markdown.js +95 -0
  25. package/dist/src/index.d.ts +6 -6
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +5 -5
  28. package/dist/src/notion-client.d.ts +58 -15
  29. package/dist/src/notion-client.d.ts.map +1 -1
  30. package/dist/src/notion-client.js +23 -13
  31. package/dist/src/schemas/block.d.ts +2158 -622
  32. package/dist/src/schemas/block.d.ts.map +1 -1
  33. package/dist/src/schemas/block.js +283 -76
  34. package/dist/src/schemas/common.d.ts +518 -6
  35. package/dist/src/schemas/common.d.ts.map +1 -1
  36. package/dist/src/schemas/common.js +120 -42
  37. package/dist/src/schemas/database.d.ts +687 -0
  38. package/dist/src/schemas/database.d.ts.map +1 -0
  39. package/dist/src/schemas/database.js +264 -0
  40. package/dist/src/schemas/filter.d.ts +509 -3
  41. package/dist/src/schemas/filter.d.ts.map +1 -1
  42. package/dist/src/schemas/filter.js +110 -13
  43. package/dist/src/schemas/index.d.ts +5 -4
  44. package/dist/src/schemas/index.d.ts.map +1 -1
  45. package/dist/src/schemas/index.js +7 -5
  46. package/dist/src/schemas/page.d.ts +2152 -19
  47. package/dist/src/schemas/page.d.ts.map +1 -1
  48. package/dist/src/schemas/page.js +216 -22
  49. package/dist/src/schemas/schemas.test.d.ts +2 -0
  50. package/dist/src/schemas/schemas.test.d.ts.map +1 -0
  51. package/dist/src/schemas/schemas.test.js +418 -0
  52. package/dist/src/server.d.ts +2 -2
  53. package/dist/src/server.d.ts.map +1 -1
  54. package/dist/src/server.js +6 -6
  55. package/dist/src/tools/append-block-children.d.ts +2 -2
  56. package/dist/src/tools/append-block-children.d.ts.map +1 -1
  57. package/dist/src/tools/append-block-children.js +16 -10
  58. package/dist/src/tools/create-comment.d.ts +2 -2
  59. package/dist/src/tools/create-comment.d.ts.map +1 -1
  60. package/dist/src/tools/create-comment.js +15 -9
  61. package/dist/src/tools/create-database.d.ts +4 -0
  62. package/dist/src/tools/create-database.d.ts.map +1 -0
  63. package/dist/src/tools/create-database.js +57 -0
  64. package/dist/src/tools/create-page.d.ts +2 -2
  65. package/dist/src/tools/create-page.d.ts.map +1 -1
  66. package/dist/src/tools/create-page.js +22 -24
  67. package/dist/src/tools/get-block-children.d.ts +2 -2
  68. package/dist/src/tools/get-block-children.d.ts.map +1 -1
  69. package/dist/src/tools/get-block-children.js +39 -6
  70. package/dist/src/tools/index.d.ts +13 -11
  71. package/dist/src/tools/index.d.ts.map +1 -1
  72. package/dist/src/tools/index.js +13 -9
  73. package/dist/src/tools/query-database.d.ts +2 -2
  74. package/dist/src/tools/query-database.d.ts.map +1 -1
  75. package/dist/src/tools/query-database.js +27 -18
  76. package/dist/src/tools/retrieve-page.d.ts +2 -2
  77. package/dist/src/tools/retrieve-page.d.ts.map +1 -1
  78. package/dist/src/tools/retrieve-page.js +44 -4
  79. package/dist/src/tools/search.d.ts +2 -2
  80. package/dist/src/tools/search.d.ts.map +1 -1
  81. package/dist/src/tools/search.js +18 -12
  82. package/dist/src/tools/update-database.d.ts +4 -0
  83. package/dist/src/tools/update-database.d.ts.map +1 -0
  84. package/dist/src/tools/update-database.js +74 -0
  85. package/dist/src/tools/update-page.d.ts +2 -2
  86. package/dist/src/tools/update-page.d.ts.map +1 -1
  87. package/dist/src/tools/update-page.js +23 -18
  88. package/dist/src/utils/error-handler.d.ts +1 -1
  89. package/dist/src/utils/error-handler.d.ts.map +1 -1
  90. package/dist/src/utils/error-handler.js +14 -14
  91. package/dist/src/utils/index.d.ts +2 -2
  92. package/dist/src/utils/index.d.ts.map +1 -1
  93. package/dist/src/utils/index.js +2 -2
  94. package/dist/src/utils/response-formatter.d.ts +13 -1
  95. package/dist/src/utils/response-formatter.d.ts.map +1 -1
  96. package/dist/src/utils/response-formatter.js +46 -3
  97. package/package.json +11 -2
@@ -2,39 +2,39 @@ function isNotionApiError(error) {
2
2
  if (!(error instanceof Error))
3
3
  return false;
4
4
  const errObj = error;
5
- return typeof errObj.code === "string" && typeof errObj.message === "string";
5
+ return typeof errObj.code === 'string' && typeof errObj.message === 'string';
6
6
  }
7
7
  export function handleError(error) {
8
8
  if (isNotionApiError(error)) {
9
9
  const message = formatNotionError(error);
10
10
  return {
11
- content: [{ type: "text", text: `Notion API Error: ${message}` }],
11
+ content: [{ type: 'text', text: `Notion API Error: ${message}` }],
12
12
  isError: true,
13
13
  };
14
14
  }
15
15
  if (error instanceof Error) {
16
16
  return {
17
- content: [{ type: "text", text: `Error: ${error.message}` }],
17
+ content: [{ type: 'text', text: `Error: ${error.message}` }],
18
18
  isError: true,
19
19
  };
20
20
  }
21
21
  return {
22
- content: [{ type: "text", text: `Unknown error: ${String(error)}` }],
22
+ content: [{ type: 'text', text: `Unknown error: ${String(error)}` }],
23
23
  isError: true,
24
24
  };
25
25
  }
26
26
  // Notion API error codes
27
27
  const NOTION_ERROR_CODES = {
28
- object_not_found: "object_not_found",
29
- unauthorized: "unauthorized",
30
- rate_limited: "rate_limited",
31
- invalid_json: "invalid_json",
32
- invalid_request_url: "invalid_request_url",
33
- invalid_request: "invalid_request",
34
- validation_error: "validation_error",
35
- conflict_error: "conflict_error",
36
- internal_server_error: "internal_server_error",
37
- service_unavailable: "service_unavailable",
28
+ object_not_found: 'object_not_found',
29
+ unauthorized: 'unauthorized',
30
+ rate_limited: 'rate_limited',
31
+ invalid_json: 'invalid_json',
32
+ invalid_request_url: 'invalid_request_url',
33
+ invalid_request: 'invalid_request',
34
+ validation_error: 'validation_error',
35
+ conflict_error: 'conflict_error',
36
+ internal_server_error: 'internal_server_error',
37
+ service_unavailable: 'service_unavailable',
38
38
  };
39
39
  function formatNotionError(error) {
40
40
  switch (error.code) {
@@ -1,3 +1,3 @@
1
- export { handleError, type McpResponse, type McpTextContent } from "./error-handler.js";
2
- export { formatPaginatedResponse, formatResponse, formatSuccessMessage, } from "./response-formatter.js";
1
+ export { handleError, type McpResponse, type McpTextContent } from './error-handler.js';
2
+ export { formatMarkdownResponse, formatPaginatedResponse, formatResponse, formatSimplePaginatedResponse, formatSimpleResponse, formatSuccessMessage, } from './response-formatter.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA"}
@@ -1,2 +1,2 @@
1
- export { handleError } from "./error-handler.js";
2
- export { formatPaginatedResponse, formatResponse, formatSuccessMessage, } from "./response-formatter.js";
1
+ export { handleError } from './error-handler.js';
2
+ export { formatMarkdownResponse, formatPaginatedResponse, formatResponse, formatSimplePaginatedResponse, formatSimpleResponse, formatSuccessMessage, } from './response-formatter.js';
@@ -1,5 +1,17 @@
1
- import type { McpResponse } from "./error-handler.js";
1
+ import type { McpResponse } from './error-handler.js';
2
2
  export declare function formatResponse(data: unknown): McpResponse;
3
3
  export declare function formatSuccessMessage(message: string): McpResponse;
4
4
  export declare function formatPaginatedResponse(data: unknown, hasMore: boolean, nextCursor: string | null): McpResponse;
5
+ /**
6
+ * マークダウン形式のレスポンスをフォーマット
7
+ */
8
+ export declare function formatMarkdownResponse(markdown: string, hasMore: boolean, nextCursor: string | null): McpResponse;
9
+ /**
10
+ * シンプル形式のレスポンスをフォーマット(JSONだがコンパクト)
11
+ */
12
+ export declare function formatSimpleResponse(data: unknown): McpResponse;
13
+ /**
14
+ * シンプル形式のページネーションレスポンスをフォーマット
15
+ */
16
+ export declare function formatSimplePaginatedResponse(data: unknown, hasMore: boolean, nextCursor: string | null): McpResponse;
5
17
  //# sourceMappingURL=response-formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-formatter.d.ts","sourceRoot":"","sources":["../../../src/utils/response-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CASzD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAIjE;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAcb"}
1
+ {"version":3,"file":"response-formatter.d.ts","sourceRoot":"","sources":["../../../src/utils/response-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CASzD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAIjE;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAcb;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAQb;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAS/D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAcb"}
@@ -2,7 +2,7 @@ export function formatResponse(data) {
2
2
  return {
3
3
  content: [
4
4
  {
5
- type: "text",
5
+ type: 'text',
6
6
  text: JSON.stringify(data, null, 2),
7
7
  },
8
8
  ],
@@ -10,7 +10,7 @@ export function formatResponse(data) {
10
10
  }
11
11
  export function formatSuccessMessage(message) {
12
12
  return {
13
- content: [{ type: "text", text: message }],
13
+ content: [{ type: 'text', text: message }],
14
14
  };
15
15
  }
16
16
  export function formatPaginatedResponse(data, hasMore, nextCursor) {
@@ -22,7 +22,50 @@ export function formatPaginatedResponse(data, hasMore, nextCursor) {
22
22
  return {
23
23
  content: [
24
24
  {
25
- type: "text",
25
+ type: 'text',
26
+ text: JSON.stringify(result, null, 2),
27
+ },
28
+ ],
29
+ };
30
+ }
31
+ /**
32
+ * マークダウン形式のレスポンスをフォーマット
33
+ */
34
+ export function formatMarkdownResponse(markdown, hasMore, nextCursor) {
35
+ let text = markdown;
36
+ if (hasMore && nextCursor) {
37
+ text += `\n\n---\n_More content available. Use next_cursor: "${nextCursor}" to continue._`;
38
+ }
39
+ return {
40
+ content: [{ type: 'text', text }],
41
+ };
42
+ }
43
+ /**
44
+ * シンプル形式のレスポンスをフォーマット(JSONだがコンパクト)
45
+ */
46
+ export function formatSimpleResponse(data) {
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: JSON.stringify(data, null, 2),
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ /**
57
+ * シンプル形式のページネーションレスポンスをフォーマット
58
+ */
59
+ export function formatSimplePaginatedResponse(data, hasMore, nextCursor) {
60
+ const result = {
61
+ data,
62
+ has_more: hasMore,
63
+ next_cursor: nextCursor,
64
+ };
65
+ return {
66
+ content: [
67
+ {
68
+ type: 'text',
26
69
  text: JSON.stringify(result, null, 2),
27
70
  },
28
71
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atikk-co-jp/notion-mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for Notion API - Create, read, update pages and databases",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -41,6 +41,13 @@
41
41
  "typecheck": "tsc --noEmit",
42
42
  "dev": "tsx watch bin/cli.ts",
43
43
  "start": "tsx bin/cli.ts",
44
+ "test": "vitest run",
45
+ "test:watch": "vitest",
46
+ "lint": "biome lint .",
47
+ "lint:fix": "biome lint --write .",
48
+ "format": "biome format --write .",
49
+ "check": "biome check .",
50
+ "check:fix": "biome check --write .",
44
51
  "prepublishOnly": "pnpm build"
45
52
  },
46
53
  "dependencies": {
@@ -48,9 +55,11 @@
48
55
  "zod": "^4.3.5"
49
56
  },
50
57
  "devDependencies": {
58
+ "@biomejs/biome": "^2.3.11",
51
59
  "@types/node": "^22.0.0",
52
60
  "tsx": "^4.19.0",
53
- "typescript": "5.9.3"
61
+ "typescript": "5.9.3",
62
+ "vitest": "^3.0.0"
54
63
  },
55
64
  "engines": {
56
65
  "node": ">=18"