@cplace/test-mcp-server 0.1.15 → 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.
Files changed (140) hide show
  1. package/README.md +248 -113
  2. package/dist/conditional-registration.d.ts.map +1 -1
  3. package/dist/conditional-registration.js +19 -3
  4. package/dist/conditional-registration.js.map +1 -1
  5. package/dist/index.js +21 -93
  6. package/dist/index.js.map +1 -1
  7. package/dist/preference-file.d.ts +16 -0
  8. package/dist/preference-file.d.ts.map +1 -0
  9. package/dist/preference-file.js +133 -0
  10. package/dist/preference-file.js.map +1 -0
  11. package/dist/profiles.d.ts +1 -3
  12. package/dist/profiles.d.ts.map +1 -1
  13. package/dist/profiles.js +60 -112
  14. package/dist/profiles.js.map +1 -1
  15. package/dist/searchConversion.d.ts.map +1 -1
  16. package/dist/searchConversion.js +18 -5
  17. package/dist/searchConversion.js.map +1 -1
  18. package/dist/searchSchema.d.ts +25 -25
  19. package/dist/searchSchema.d.ts.map +1 -1
  20. package/dist/searchSchema.js +5 -5
  21. package/dist/searchSchema.js.map +1 -1
  22. package/dist/token-hashing.d.ts +3 -0
  23. package/dist/token-hashing.d.ts.map +1 -0
  24. package/dist/token-hashing.js +18 -0
  25. package/dist/token-hashing.js.map +1 -0
  26. package/dist/tool-metadata.d.ts +2 -0
  27. package/dist/tool-metadata.d.ts.map +1 -0
  28. package/dist/tool-metadata.js +43 -0
  29. package/dist/tool-metadata.js.map +1 -0
  30. package/dist/tools/change-listeners.d.ts +30 -0
  31. package/dist/tools/change-listeners.d.ts.map +1 -1
  32. package/dist/tools/change-listeners.js +24 -18
  33. package/dist/tools/change-listeners.js.map +1 -1
  34. package/dist/tools/common-schemas.d.ts +2 -0
  35. package/dist/tools/common-schemas.d.ts.map +1 -1
  36. package/dist/tools/common-schemas.js +16 -0
  37. package/dist/tools/common-schemas.js.map +1 -1
  38. package/dist/tools/csv-export.d.ts +1849 -0
  39. package/dist/tools/csv-export.d.ts.map +1 -0
  40. package/dist/tools/csv-export.js +61 -0
  41. package/dist/tools/csv-export.js.map +1 -0
  42. package/dist/tools/generic-layouts.d.ts +302 -0
  43. package/dist/tools/generic-layouts.d.ts.map +1 -1
  44. package/dist/tools/generic-layouts.js +102 -70
  45. package/dist/tools/generic-layouts.js.map +1 -1
  46. package/dist/tools/get-operations.d.ts +16 -0
  47. package/dist/tools/get-operations.d.ts.map +1 -0
  48. package/dist/tools/get-operations.js +63 -0
  49. package/dist/tools/get-operations.js.map +1 -0
  50. package/dist/tools/pages.d.ts +55 -0
  51. package/dist/tools/pages.d.ts.map +1 -1
  52. package/dist/tools/pages.js +173 -257
  53. package/dist/tools/pages.js.map +1 -1
  54. package/dist/tools/ppt-export-schemas.d.ts +16 -16
  55. package/dist/tools/ppt-export.d.ts +1493 -0
  56. package/dist/tools/ppt-export.d.ts.map +1 -1
  57. package/dist/tools/ppt-export.js +23 -17
  58. package/dist/tools/ppt-export.js.map +1 -1
  59. package/dist/tools/profile-management.d.ts +20 -0
  60. package/dist/tools/profile-management.d.ts.map +1 -0
  61. package/dist/tools/profile-management.js +250 -0
  62. package/dist/tools/profile-management.js.map +1 -0
  63. package/dist/tools/references.d.ts +36 -0
  64. package/dist/tools/references.d.ts.map +1 -1
  65. package/dist/tools/references.js +48 -45
  66. package/dist/tools/references.js.map +1 -1
  67. package/dist/tools/richstring-widgets.d.ts +51 -0
  68. package/dist/tools/richstring-widgets.d.ts.map +1 -0
  69. package/dist/tools/richstring-widgets.js +173 -0
  70. package/dist/tools/richstring-widgets.js.map +1 -0
  71. package/dist/tools/schedule.d.ts +14 -0
  72. package/dist/tools/schedule.d.ts.map +1 -1
  73. package/dist/tools/schedule.js +7 -3
  74. package/dist/tools/schedule.js.map +1 -1
  75. package/dist/tools/script-logs.d.ts +29 -0
  76. package/dist/tools/script-logs.d.ts.map +1 -0
  77. package/dist/tools/script-logs.js +144 -0
  78. package/dist/tools/script-logs.js.map +1 -0
  79. package/dist/tools/search.d.ts +1870 -0
  80. package/dist/tools/search.d.ts.map +1 -1
  81. package/dist/tools/search.js +49 -75
  82. package/dist/tools/search.js.map +1 -1
  83. package/dist/tools/system.d.ts.map +1 -1
  84. package/dist/tools/system.js +4 -2
  85. package/dist/tools/system.js.map +1 -1
  86. package/dist/tools/type-layouts.d.ts +37 -0
  87. package/dist/tools/type-layouts.d.ts.map +1 -1
  88. package/dist/tools/type-layouts.js +30 -22
  89. package/dist/tools/type-layouts.js.map +1 -1
  90. package/dist/tools/type-management.d.ts +134 -0
  91. package/dist/tools/type-management.d.ts.map +1 -0
  92. package/dist/tools/{workspace.js → type-management.js} +67 -307
  93. package/dist/tools/type-management.js.map +1 -0
  94. package/dist/tools/users.d.ts +19 -0
  95. package/dist/tools/users.d.ts.map +1 -1
  96. package/dist/tools/users.js +14 -28
  97. package/dist/tools/users.js.map +1 -1
  98. package/dist/tools/validators.d.ts +28 -0
  99. package/dist/tools/validators.d.ts.map +1 -1
  100. package/dist/tools/validators.js +21 -15
  101. package/dist/tools/validators.js.map +1 -1
  102. package/dist/tools/version-check.d.ts.map +1 -1
  103. package/dist/tools/version-check.js +11 -9
  104. package/dist/tools/version-check.js.map +1 -1
  105. package/dist/tools/version-history.d.ts +48 -0
  106. package/dist/tools/version-history.d.ts.map +1 -1
  107. package/dist/tools/version-history.js +39 -29
  108. package/dist/tools/version-history.js.map +1 -1
  109. package/dist/tools/widgets.d.ts +182 -0
  110. package/dist/tools/widgets.d.ts.map +1 -1
  111. package/dist/tools/widgets.js +122 -343
  112. package/dist/tools/widgets.js.map +1 -1
  113. package/dist/tools/workflow-scripts.d.ts +40 -0
  114. package/dist/tools/workflow-scripts.d.ts.map +1 -0
  115. package/dist/tools/workflow-scripts.js +186 -0
  116. package/dist/tools/workflow-scripts.js.map +1 -0
  117. package/dist/tools/workflow.d.ts +70 -0
  118. package/dist/tools/workflow.d.ts.map +1 -0
  119. package/dist/tools/workflow.js +259 -0
  120. package/dist/tools/workflow.js.map +1 -0
  121. package/dist/tools/workspace-admin.d.ts +40 -0
  122. package/dist/tools/workspace-admin.d.ts.map +1 -0
  123. package/dist/tools/workspace-admin.js +125 -0
  124. package/dist/tools/workspace-admin.js.map +1 -0
  125. package/dist/tools/workspace-core.d.ts +45 -0
  126. package/dist/tools/workspace-core.d.ts.map +1 -0
  127. package/dist/tools/workspace-core.js +153 -0
  128. package/dist/tools/workspace-core.js.map +1 -0
  129. package/dist/types.d.ts +3 -3
  130. package/dist/types.d.ts.map +1 -1
  131. package/dist/utils/dateValidation.d.ts +5 -0
  132. package/dist/utils/dateValidation.d.ts.map +1 -0
  133. package/dist/utils/dateValidation.js +57 -0
  134. package/dist/utils/dateValidation.js.map +1 -0
  135. package/dist/utils.js +7 -7
  136. package/dist/utils.js.map +1 -1
  137. package/package.json +1 -1
  138. package/dist/tools/workspace.d.ts +0 -4
  139. package/dist/tools/workspace.d.ts.map +0 -1
  140. package/dist/tools/workspace.js.map +0 -1
@@ -1,48 +1,61 @@
1
1
  import { z } from "zod";
2
2
  import { debugLogWithTag } from "../logger.js";
3
- import { truncateDocumentSummaries } from "../utils.js";
4
- export function registerPageTools(server, client) {
5
- server.registerTool("cplace_get_page_by_id", {
6
- description: "Get comprehensive page information including relationships and metadata",
3
+ import { DATE_TIME_FORMAT_DESCRIPTION } from "./common-schemas.js";
4
+ const TOOL_DELETE_PAGE = 'cplace_delete_page';
5
+ const TOOL_DELETE_PAGE_WITH_CHILDREN = 'cplace_delete_page_with_children';
6
+ const TOOL_COPY_PAGE = 'cplace_copy_page';
7
+ const TOOL_MANAGE_PAGE = 'cplace_manage_page';
8
+ export const PAGE_TOOL_DEFINITIONS = {
9
+ [TOOL_DELETE_PAGE]: {
10
+ description: "⚠️ DESTRUCTIVE OPERATION: Permanently delete a single page. Only works for leaf pages (pages without children). For pages with children, use cplace_delete_page_with_children.",
7
11
  inputSchema: {
8
- id: z.string().describe("The ID of the page to get, e.g. 'page/kkt8ol745jqur4581kelm5ply'")
12
+ pageUID: z.string().describe("The unique identifier (UID) of the page to delete (e.g., 'page/abc123def456')")
9
13
  },
10
- annotations: { title: "Get Page by ID" }
11
- }, async ({ id }) => {
12
- try {
13
- const result = await client.makeApiRequest('json/page', 'GET', { pageUID: id });
14
- if (result.documents && Array.isArray(result.documents)) {
15
- result.documents = truncateDocumentSummaries(result.documents);
16
- }
17
- return {
18
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
19
- };
20
- }
21
- catch (error) {
22
- return {
23
- content: [{ type: "text", text: `Error retrieving page: ${error instanceof Error ? error.message : String(error)}` }],
24
- isError: true
25
- };
26
- }
27
- });
28
- server.registerTool("cplace_create_page", {
29
- description: "Create a new page with specified attributes and content using the POST /page/create endpoint",
14
+ annotations: { title: "Delete Page" }
15
+ },
16
+ [TOOL_DELETE_PAGE_WITH_CHILDREN]: {
17
+ description: "⚠️ DESTRUCTIVE OPERATION: Permanently delete a page and optionally all its children. Uses a two-phase workflow: first call shows preview, second call with confirmation performs deletion.",
30
18
  inputSchema: {
31
- workspaceId: z.string().describe("The ID of the workspace to create the page in (e.g., 'abc123')"),
32
- typeInternalName: z.string().describe("The internal name of the page type (e.g., 'cf.example.myType')"),
33
- name: z.string().describe("The name of the new page"),
34
- parentUID: z.string().optional().describe("The UID of the parent page for hierarchy (optional)"),
35
- content: z.string().optional().describe("HTML content for the page (optional). Use HTML markup, not markdown - e.g. '<strong>bold</strong>' not '**bold**'"),
19
+ pageUID: z.string().describe("The unique identifier (UID) of the page to delete"),
20
+ confirmDeleteChildren: z.boolean().optional().default(false).describe("Explicit confirmation flag for bulk deletion. Set to true to confirm deletion of page and all children.")
21
+ },
22
+ annotations: { title: "Delete Page with Children" }
23
+ },
24
+ [TOOL_COPY_PAGE]: {
25
+ description: "Copy a page with optional hierarchical copy. Set includeChildren=false for single page copy (leaf pages only), or includeChildren=true for copying page with all children. When includeChildren=true, uses a two-phase workflow: first call shows preview, second call with confirmCopyChildren=true performs the copy.",
26
+ inputSchema: {
27
+ sourcePageUID: z.string().describe("The UID of the page to copy (e.g., 'page/abc123def456')"),
28
+ includeChildren: z.boolean().describe("Whether to copy child pages. false (default) for single page copy (will fail if page has children), true for hierarchical copy with all descendants."),
29
+ confirmCopyChildren: z.boolean().optional().describe("Required confirmation when includeChildren=true. Set to false (or omit) for preview showing child count, set to true to perform the actual bulk copy operation. Ignored when includeChildren=false."),
30
+ targetWorkspaceId: z.string().optional().describe("Target workspace ID (e.g., 'workspace789'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
31
+ targetParentUID: z.string().optional().describe("UID of target parent page (e.g., 'page/parent123xyz'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
32
+ newName: z.string().optional().describe("New name for the copied page (optional). If not provided, uses original page name. When includeChildren=true, only the root page is renamed; children retain their original names."),
33
+ includeComments: z.boolean().optional().default(false).describe("Whether to copy comments from the page(s). Default: false for single page copy, false for hierarchical copy. Comments add context but increase copy time significantly for large hierarchies."),
34
+ includeFiles: z.boolean().optional().default(true).describe("Whether to copy files attached to the page(s). Default: true for single page copy, true for hierarchical copy. Files are typically needed for complete page copies but increase copy time and storage usage.")
35
+ },
36
+ annotations: { title: "Copy Page" }
37
+ },
38
+ [TOOL_MANAGE_PAGE]: {
39
+ description: "Create or update a page. Use operation='create' to create new pages with workspace and type. Use operation='update' to modify existing pages by UID. 🔍 IMPORTANT: Use 'cplace_get_type_datamodel' before creating pages to understand attribute requirements.",
40
+ inputSchema: {
41
+ operation: z.enum(["create", "update"]).describe("Operation to perform: 'create' for new pages, 'update' for existing pages"),
42
+ workspaceId: z.string().optional().describe("Required for create: The workspace ID where the page should be created (e.g., 'abc123')"),
43
+ typeInternalName: z.string().optional().describe("Required for create: The type internal name (e.g., 'cf.example.myType')"),
44
+ pageUID: z.string().optional().describe("Required for update: The UID of the page to update (e.g., 'page/abc123def456')"),
45
+ name: z.string().optional().describe("Page name. For create operations: optional if type has name generation pattern (auto-generates from pattern), otherwise required. For update operations: optional. Name generation pattern syntax: <attributeName> for attribute values, {###} for sequential counter, {0000} for zero-padded counter. Example: '<title>-{0000}' generates 'ProjectAlpha-0001'. Provide explicit name to override pattern. Use cplace_get_type_datamodel to check if type supports name generation."),
46
+ parentUID: z.string().optional().describe("Parent page UID for hierarchy. For create: sets initial parent. For update: moves page (use empty string to remove parent)."),
47
+ content: z.string().optional().describe("HTML content for the page. Use HTML markup, not markdown - e.g. '<strong>bold</strong>' not '**bold**'. For update: use empty string to remove content."),
36
48
  attributes: z.record(z.any()).optional().describe(`Custom attribute values as key-value pairs. 🔍 IMPORTANT: Use 'cplace_get_type_datamodel' tool first to understand attribute requirements and constraints. Supports:
37
49
  - String values: "text"
38
50
  - Numeric values: 42 or 3.14
39
51
  - Boolean values: true/false
40
- - Date values: "2024-01-15" or "2024-01-15T10:30:00"
52
+ - Date values: ${DATE_TIME_FORMAT_DESCRIPTION}
41
53
  - Array values: ["value1", "value2"] for multi-valued attributes
42
54
  - Reference values: "page/ref123" for page references
43
55
  - RichString values: "<p><strong>HTML markup</strong></p>" (use HTML, not markdown or plain text)
44
56
  - Localized string values: {"en": "English text", "de": "German text", "fr": "French text"}
45
57
  - Multi-valued localized strings: [{"en": "Text 1", "de": "Text 1"}, {"en": "Text 2", "de": "Text 2"}]
58
+ - For update only: null (removes the attribute value), [] (removes all values for multi-valued attributes)
46
59
 
47
60
  The system automatically detects attribute types from the page type definition and handles:
48
61
  - Type-aware processing based on actual attribute definitions
@@ -50,8 +63,8 @@ The system automatically detects attribute types from the page type definition a
50
63
  - Automatic type conversion and validation
51
64
  - Enhanced error messages with attribute-specific details`),
52
65
  builtinAttributes: z.record(z.any()).optional().describe(`Builtin/mixin-provided attributes (optional for schedules). Supports:
53
- - owner: Person UID as string (e.g., "person/123abc456") - Sets the page owner for schedules
54
- - Use null to remove builtin attribute values
66
+ - owner: Person UID as string (e.g., "person/123abc456") - Sets/updates the page owner for schedules
67
+ - For update only: Use null to remove builtin attribute values
55
68
 
56
69
  Supported page type:
57
70
  - Schedule (cf.schedule): supports owner attribute
@@ -59,133 +72,103 @@ Supported page type:
59
72
  Example for schedule:
60
73
  {"owner": "person/123abc456"}`)
61
74
  },
62
- annotations: { title: "Create Page" }
63
- }, async ({ workspaceId, typeInternalName, name, parentUID, content, attributes, builtinAttributes }) => {
64
- debugLogWithTag('CREATE_PAGE', `Starting page creation: ${name} of type ${typeInternalName} in workspace ${workspaceId}`);
75
+ annotations: { title: "Manage Page" }
76
+ }
77
+ };
78
+ export function registerPageTools(server, client) {
79
+ server.registerTool(TOOL_MANAGE_PAGE, PAGE_TOOL_DEFINITIONS[TOOL_MANAGE_PAGE], async (params) => {
80
+ const { operation } = params;
81
+ debugLogWithTag('MANAGE_PAGE', `${operation} page operation`);
65
82
  try {
66
- const requestBody = {
67
- workspaceId,
68
- typeInternalName,
69
- name
70
- };
71
- if (parentUID) {
72
- requestBody.parentUID = parentUID;
73
- debugLogWithTag('CREATE_PAGE', `Including parentUID: ${parentUID}`);
74
- }
75
- if (content) {
76
- requestBody.content = content;
77
- debugLogWithTag('CREATE_PAGE', `Including content (${content.length} chars)`);
78
- }
79
- if (attributes && Object.keys(attributes).length > 0) {
80
- requestBody.attributes = attributes;
81
- debugLogWithTag('CREATE_PAGE', `Including attributes: ${JSON.stringify(Object.keys(attributes))}`);
83
+ if (operation === "create") {
84
+ if (!params.workspaceId || !params.typeInternalName) {
85
+ return {
86
+ content: [{
87
+ type: "text",
88
+ text: "Error: workspaceId and typeInternalName are required when operation='create'."
89
+ }],
90
+ isError: true
91
+ };
92
+ }
93
+ const requestBody = {
94
+ workspaceId: params.workspaceId,
95
+ typeInternalName: params.typeInternalName
96
+ };
97
+ if (params.name !== undefined && params.name !== null && params.name !== "") {
98
+ requestBody.name = params.name;
99
+ }
100
+ if (params.parentUID) {
101
+ requestBody.parentUID = params.parentUID;
102
+ debugLogWithTag('MANAGE_PAGE', `Including parentUID: ${params.parentUID}`);
103
+ }
104
+ if (params.content) {
105
+ requestBody.content = params.content;
106
+ debugLogWithTag('MANAGE_PAGE', `Including content (${params.content.length} chars)`);
107
+ }
108
+ if (params.attributes && Object.keys(params.attributes).length > 0) {
109
+ requestBody.attributes = params.attributes;
110
+ debugLogWithTag('MANAGE_PAGE', `Including attributes: ${JSON.stringify(Object.keys(params.attributes))}`);
111
+ }
112
+ if (params.builtinAttributes && Object.keys(params.builtinAttributes).length > 0) {
113
+ requestBody.builtinAttributes = params.builtinAttributes;
114
+ debugLogWithTag('MANAGE_PAGE', `Including builtinAttributes: ${JSON.stringify(Object.keys(params.builtinAttributes))}`);
115
+ }
116
+ debugLogWithTag('MANAGE_PAGE', `Request body: ${JSON.stringify(requestBody, null, 2)}`);
117
+ const result = await client.makeApiRequest('json/page/create', 'POST', undefined, requestBody);
118
+ debugLogWithTag('MANAGE_PAGE', `Successfully created page: ${params.name}`);
119
+ return {
120
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
121
+ };
82
122
  }
83
- if (builtinAttributes && Object.keys(builtinAttributes).length > 0) {
84
- requestBody.builtinAttributes = builtinAttributes;
85
- debugLogWithTag('CREATE_PAGE', `Including builtinAttributes: ${JSON.stringify(Object.keys(builtinAttributes))}`);
123
+ else {
124
+ if (!params.pageUID) {
125
+ return {
126
+ content: [{
127
+ type: "text",
128
+ text: "Error: pageUID is required when operation='update'. Specify the UID of the page to update."
129
+ }],
130
+ isError: true
131
+ };
132
+ }
133
+ const requestBody = {
134
+ pageUID: params.pageUID
135
+ };
136
+ if (params.name !== undefined)
137
+ requestBody.name = params.name;
138
+ if (params.content !== undefined)
139
+ requestBody.content = params.content;
140
+ if (params.parentUID !== undefined)
141
+ requestBody.parentUID = params.parentUID;
142
+ if (params.attributes && Object.keys(params.attributes).length > 0) {
143
+ requestBody.attributes = params.attributes;
144
+ }
145
+ if (params.builtinAttributes && Object.keys(params.builtinAttributes).length > 0) {
146
+ requestBody.builtinAttributes = params.builtinAttributes;
147
+ }
148
+ if (Object.keys(requestBody).length === 1) {
149
+ return {
150
+ content: [{ type: "text", text: "No updates specified. At least one of name, content, parentUID, attributes, or builtinAttributes must be provided." }]
151
+ };
152
+ }
153
+ const result = await client.makeApiRequest('json/page', 'PATCH', undefined, requestBody);
154
+ debugLogWithTag('MANAGE_PAGE', `Successfully updated page: ${params.pageUID}`);
155
+ return {
156
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
157
+ };
86
158
  }
87
- debugLogWithTag('CREATE_PAGE', `Request body: ${JSON.stringify(requestBody, null, 2)}`);
88
- const result = await client.makeApiRequest('json/page/create', 'POST', undefined, requestBody);
89
- debugLogWithTag('CREATE_PAGE', `Successfully created page: ${name}`);
90
- return {
91
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
92
- };
93
159
  }
94
160
  catch (error) {
95
- debugLogWithTag('CREATE_PAGE', `Error creating page: ${error instanceof Error ? error.message : String(error)}`);
161
+ debugLogWithTag('MANAGE_PAGE', `Error ${operation} page: ${error instanceof Error ? error.message : String(error)}`);
96
162
  return {
97
163
  content: [{
98
164
  type: "text",
99
- text: `Error creating page: ${error instanceof Error ? error.message : String(error)}`
165
+ text: `Error ${operation} page: ${error instanceof Error ? error.message : String(error)}`
100
166
  }],
101
167
  isError: true
102
168
  };
103
169
  }
104
170
  });
105
- server.registerTool("cplace_update_page", {
106
- description: "Update an existing page's attributes, content, or structure",
107
- inputSchema: {
108
- pageUID: z.string().describe("The unique identifier (UID) of the page to update"),
109
- name: z.string().optional().describe("New name for the page (optional)"),
110
- content: z.string().optional().describe("New HTML content (optional). Use HTML markup, not markdown - e.g. '<em>italic</em>' not '*italic*'. Use empty string to remove content."),
111
- parentUID: z.string().optional().describe("New parent page UID (optional - for moving pages). Use empty string to remove parent."),
112
- attributes: z.record(z.any()).optional().describe(`Custom attributes to update as key-value pairs. 🔍 IMPORTANT: Use 'cplace_get_type_datamodel' tool first to understand attribute requirements and constraints. Supports:
113
- - String values: "text"
114
- - Numeric values: 42 or 3.14
115
- - Boolean values: true/false
116
- - Date values: "2024-01-15" or "2024-01-15T10:30:00"
117
- - Array values: ["value1", "value2"] for multi-valued attributes
118
- - Reference values: "page/ref123" for page references
119
- - RichString values: "<p><strong>HTML markup</strong></p>" (use HTML, not markdown or plain text)
120
- - Localized string values: {"en": "English text", "de": "German text", "fr": "French text"}
121
- - Multi-valued localized strings: [{"en": "Text 1", "de": "Text 1"}, {"en": "Text 2", "de": "Text 2"}]
122
- - Null values: null (removes the attribute value)
123
- - Empty arrays: [] (removes all values for multi-valued attributes)
124
- - New attributes: will be added to the page
125
-
126
- The system automatically detects attribute types from the page type definition and handles:
127
- - Type-aware processing based on actual attribute definitions
128
- - Proper multiplicity validation (single vs multi-valued)
129
- - Automatic type conversion and validation
130
- - Enhanced error messages with attribute-specific details`),
131
- builtinAttributes: z.record(z.any()).optional().describe(`Builtin/mixin-provided attributes to update (optional for schedules). Supports:
132
- - owner: Person UID as string (e.g., "person/456def789") - Updates the page owner for schedules
133
- - Use null to remove builtin attribute values
134
-
135
- Supported page type:
136
- - Schedule (cf.schedule): supports owner attribute
137
-
138
- Example for schedule:
139
- {"owner": "person/123abc456"}`)
140
- },
141
- annotations: { title: "Update Page" }
142
- }, async ({ pageUID, name, content, parentUID, attributes, builtinAttributes }) => {
143
- debugLogWithTag('UPDATE_PAGE', `Starting page update for: ${pageUID}`);
144
- try {
145
- const requestBody = {
146
- pageUID
147
- };
148
- if (name !== undefined) {
149
- requestBody.name = name;
150
- }
151
- if (content !== undefined) {
152
- requestBody.content = content;
153
- }
154
- if (parentUID !== undefined) {
155
- requestBody.parentUID = parentUID;
156
- }
157
- if (attributes && Object.keys(attributes).length > 0) {
158
- requestBody.attributes = attributes;
159
- }
160
- if (builtinAttributes && Object.keys(builtinAttributes).length > 0) {
161
- requestBody.builtinAttributes = builtinAttributes;
162
- }
163
- if (Object.keys(requestBody).length === 1) {
164
- return {
165
- content: [{ type: "text", text: "No updates specified. At least one of name, content, parentId, or attributes must be provided." }]
166
- };
167
- }
168
- const result = await client.makeApiRequest('json/page', 'PATCH', undefined, requestBody);
169
- debugLogWithTag('UPDATE_PAGE', `Successfully updated page: ${pageUID}`);
170
- return {
171
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
172
- };
173
- }
174
- catch (error) {
175
- debugLogWithTag('UPDATE_PAGE', `Error updating page: ${error instanceof Error ? error.message : String(error)}`);
176
- return {
177
- content: [{ type: "text", text: `Error updating page: ${error instanceof Error ? error.message : String(error)}` }],
178
- isError: true
179
- };
180
- }
181
- });
182
- server.registerTool("cplace_delete_page", {
183
- description: "⚠️ DESTRUCTIVE OPERATION: Permanently delete a single page. Only works for leaf pages (pages without children). For pages with children, use cplace_delete_page_with_children.",
184
- inputSchema: {
185
- pageUID: z.string().describe("The unique identifier (UID) of the page to delete (e.g., 'page/abc123def456')")
186
- },
187
- annotations: { title: "Delete Page" }
188
- }, async ({ pageUID }) => {
171
+ server.registerTool(TOOL_DELETE_PAGE, PAGE_TOOL_DEFINITIONS[TOOL_DELETE_PAGE], async ({ pageUID }) => {
189
172
  debugLogWithTag('DELETE_PAGE', `Starting single page deletion for: ${pageUID}`);
190
173
  try {
191
174
  const result = await client.makeApiRequest(`page?pageUID=${pageUID}`, 'DELETE');
@@ -214,14 +197,7 @@ Example for schedule:
214
197
  };
215
198
  }
216
199
  });
217
- server.registerTool("cplace_delete_page_with_children", {
218
- description: "⚠️ DESTRUCTIVE OPERATION: Permanently delete a page and optionally all its children. Uses a two-phase workflow: first call shows preview, second call with confirmation performs deletion.",
219
- inputSchema: {
220
- pageUID: z.string().describe("The unique identifier (UID) of the page to delete"),
221
- confirmDeleteChildren: z.boolean().optional().default(false).describe("Explicit confirmation flag for bulk deletion. Set to true to confirm deletion of page and all children.")
222
- },
223
- annotations: { title: "Delete Page with Children" }
224
- }, async ({ pageUID, confirmDeleteChildren = false }) => {
200
+ server.registerTool(TOOL_DELETE_PAGE_WITH_CHILDREN, PAGE_TOOL_DEFINITIONS[TOOL_DELETE_PAGE_WITH_CHILDREN], async ({ pageUID, confirmDeleteChildren = false }) => {
225
201
  debugLogWithTag('DELETE_PAGE_WITH_CHILDREN', `Starting page deletion with children for: ${pageUID}, confirm: ${confirmDeleteChildren}`);
226
202
  try {
227
203
  const requestBody = {
@@ -254,42 +230,18 @@ Example for schedule:
254
230
  };
255
231
  }
256
232
  });
257
- server.registerTool("cplace_copy_page", {
258
- description: "Copy a single page without children to a new location using the POST /page/copy endpoint. If the source page has children, the API will reject the request and direct you to use cplace_copy_page_with_children instead.",
259
- inputSchema: {
260
- sourcePageUID: z.string().describe("The UID of the page to copy (e.g., 'page/abc123def456')"),
261
- targetWorkspaceId: z.string().optional().describe("Target workspace ID (e.g., 'workspace789'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
262
- targetParentUID: z.string().optional().describe("UID of target parent page (e.g., 'page/parent123xyz'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
263
- newName: z.string().optional().describe("New name for the copied page (optional). If not provided, the original page name will be used."),
264
- includeComments: z.boolean().describe("Whether to copy comments from the page (required). Comments can add context but increase copy time."),
265
- includeFiles: z.boolean().describe("Whether to copy files attached to the page (required). Files are typically needed for complete page copies but increase copy time and storage usage.")
266
- },
267
- annotations: { title: "Copy Page" }
268
- }, async ({ sourcePageUID, targetWorkspaceId, targetParentUID, newName, includeComments, includeFiles }) => {
269
- debugLogWithTag('COPY_PAGE', `Starting page copy for: ${sourcePageUID}, includeComments: ${includeComments}, includeFiles: ${includeFiles}`);
233
+ server.registerTool(TOOL_COPY_PAGE, PAGE_TOOL_DEFINITIONS[TOOL_COPY_PAGE], async (params) => {
234
+ const { includeChildren = false } = params;
235
+ debugLogWithTag('COPY_PAGE', `Copying page ${params.sourcePageUID}, includeChildren=${includeChildren}, confirmCopyChildren=${params.confirmCopyChildren}`);
270
236
  try {
271
- const requestBody = {
272
- sourcePageUID,
273
- includeComments,
274
- includeFiles
275
- };
276
- if (targetWorkspaceId) {
277
- requestBody.targetWorkspaceId = targetWorkspaceId;
278
- }
279
- if (targetParentUID) {
280
- requestBody.targetParentUID = targetParentUID;
281
- }
282
- if (newName) {
283
- requestBody.newName = newName;
284
- }
285
- const hasWorkspace = !!targetWorkspaceId;
286
- const hasParent = !!targetParentUID;
237
+ const hasWorkspace = !!params.targetWorkspaceId;
238
+ const hasParent = !!params.targetParentUID;
287
239
  if (!hasWorkspace && !hasParent) {
288
240
  debugLogWithTag('COPY_PAGE', 'Validation failed: No target specified');
289
241
  return {
290
242
  content: [{
291
243
  type: "text",
292
- text: "Either targetWorkspaceId or targetParentUID must be provided"
244
+ text: "Error: Either targetWorkspaceId or targetParentUID must be provided. Specify exactly one target location for the copied page."
293
245
  }],
294
246
  isError: true
295
247
  };
@@ -299,99 +251,63 @@ Example for schedule:
299
251
  return {
300
252
  content: [{
301
253
  type: "text",
302
- text: "Only one of targetWorkspaceId or targetParentUID can be provided, not both"
254
+ text: "Error: Only one of targetWorkspaceId or targetParentUID can be provided, not both. Choose a single target location."
303
255
  }],
304
256
  isError: true
305
257
  };
306
258
  }
259
+ const endpoint = includeChildren
260
+ ? 'json/page/copy-with-children'
261
+ : 'json/page/copy';
262
+ const requestBody = {
263
+ sourcePageUID: params.sourcePageUID,
264
+ includeComments: params.includeComments ?? false,
265
+ includeFiles: params.includeFiles ?? true
266
+ };
267
+ if (params.targetWorkspaceId)
268
+ requestBody.targetWorkspaceId = params.targetWorkspaceId;
269
+ if (params.targetParentUID)
270
+ requestBody.targetParentUID = params.targetParentUID;
271
+ if (params.newName)
272
+ requestBody.newName = params.newName;
273
+ if (includeChildren) {
274
+ requestBody.confirmCopyChildren = params.confirmCopyChildren ?? false;
275
+ }
307
276
  debugLogWithTag('COPY_PAGE', `Request body: ${JSON.stringify(requestBody, null, 2)}`);
308
- const result = await client.makeApiRequest('json/page/copy', 'POST', undefined, requestBody);
309
- debugLogWithTag('COPY_PAGE', `Successfully copied page: ${sourcePageUID}`);
277
+ const result = await client.makeApiRequest(endpoint, 'POST', undefined, requestBody);
278
+ if (includeChildren) {
279
+ if (params.confirmCopyChildren) {
280
+ debugLogWithTag('COPY_PAGE', `Successfully copied page with children: ${params.sourcePageUID}`);
281
+ }
282
+ else {
283
+ debugLogWithTag('COPY_PAGE', `Retrieved copy preview for: ${params.sourcePageUID}`);
284
+ }
285
+ }
286
+ else {
287
+ debugLogWithTag('COPY_PAGE', `Successfully copied page: ${params.sourcePageUID}`);
288
+ }
310
289
  return {
311
290
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
312
291
  };
313
292
  }
314
293
  catch (error) {
315
294
  debugLogWithTag('COPY_PAGE', `Error copying page: ${error instanceof Error ? error.message : String(error)}`);
316
- return {
317
- content: [{
318
- type: "text",
319
- text: `Error copying page: ${error instanceof Error ? error.message : String(error)}`
320
- }],
321
- isError: true
322
- };
323
- }
324
- });
325
- server.registerTool("cplace_copy_page_with_children", {
326
- description: "Copy a page including all its children using the POST /page/copy-with-children endpoint. Uses a two-phase workflow: first call (confirmCopyChildren: false) shows preview with child count, second call (confirmCopyChildren: true) performs the actual copy operation.",
327
- inputSchema: {
328
- sourcePageUID: z.string().describe("The UID of the page to copy (e.g., 'page/project123abc')"),
329
- targetWorkspaceId: z.string().optional().describe("Target workspace ID (e.g., 'workspace789'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
330
- targetParentUID: z.string().optional().describe("UID of target parent page (e.g., 'page/parent123xyz'). Exactly one of targetWorkspaceId or targetParentUID must be provided."),
331
- newName: z.string().optional().describe("New name for the copied root page (optional). Children retain their original names."),
332
- confirmCopyChildren: z.boolean().optional().default(false).describe("Explicit confirmation flag for copying children. Set to false (default) for preview, set to true to perform the actual copy operation."),
333
- includeComments: z.boolean().optional().default(false).describe("Whether to copy comments from pages (default: false). Comments can significantly increase copy time."),
334
- includeFiles: z.boolean().optional().default(true).describe("Whether to copy files attached to pages (default: true). Files are typically needed for complete page copies.")
335
- },
336
- annotations: { title: "Copy Page with Children" }
337
- }, async ({ sourcePageUID, targetWorkspaceId, targetParentUID, newName, confirmCopyChildren = false, includeComments = false, includeFiles = true }) => {
338
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', `Starting page copy with children for: ${sourcePageUID}, confirm: ${confirmCopyChildren}, includeComments: ${includeComments}, includeFiles: ${includeFiles}`);
339
- try {
340
- const requestBody = {
341
- sourcePageUID,
342
- confirmCopyChildren,
343
- includeComments,
344
- includeFiles
345
- };
346
- if (targetWorkspaceId) {
347
- requestBody.targetWorkspaceId = targetWorkspaceId;
348
- }
349
- if (targetParentUID) {
350
- requestBody.targetParentUID = targetParentUID;
351
- }
352
- if (newName) {
353
- requestBody.newName = newName;
354
- }
355
- const hasWorkspace = !!targetWorkspaceId;
356
- const hasParent = !!targetParentUID;
357
- if (!hasWorkspace && !hasParent) {
358
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', 'Validation failed: No target specified');
359
- return {
360
- content: [{
361
- type: "text",
362
- text: "Either targetWorkspaceId or targetParentUID must be provided"
363
- }],
364
- isError: true
365
- };
366
- }
367
- if (hasWorkspace && hasParent) {
368
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', 'Validation failed: Both targets specified');
295
+ const errorMessage = error instanceof Error ? error.message : String(error);
296
+ const childMatch = errorMessage.match(/Found (\d+) child items/);
297
+ if (childMatch) {
298
+ const childCount = childMatch[1];
369
299
  return {
370
300
  content: [{
371
301
  type: "text",
372
- text: "Only one of targetWorkspaceId or targetParentUID can be provided, not both"
302
+ text: `This page has ${childCount} children. Retry with includeChildren: true and confirmCopyChildren: false to preview.`
373
303
  }],
374
304
  isError: true
375
305
  };
376
306
  }
377
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', `Request body: ${JSON.stringify(requestBody, null, 2)}`);
378
- const result = await client.makeApiRequest('json/page/copy-with-children', 'POST', undefined, requestBody);
379
- if (confirmCopyChildren) {
380
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', `Successfully copied page with children: ${sourcePageUID}`);
381
- }
382
- else {
383
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', `Retrieved copy preview for: ${sourcePageUID}`);
384
- }
385
- return {
386
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
387
- };
388
- }
389
- catch (error) {
390
- debugLogWithTag('COPY_PAGE_WITH_CHILDREN', `Error copying page with children: ${error instanceof Error ? error.message : String(error)}`);
391
307
  return {
392
308
  content: [{
393
309
  type: "text",
394
- text: `Error copying page with children: ${error instanceof Error ? error.message : String(error)}`
310
+ text: `Error copying page: ${errorMessage}`
395
311
  }],
396
312
  isError: true
397
313
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"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"}