@cplace/test-mcp-server 0.1.14 → 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 (149) hide show
  1. package/README.md +275 -75
  2. package/dist/api.d.ts +4 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/conditional-registration.d.ts.map +1 -1
  6. package/dist/conditional-registration.js +21 -3
  7. package/dist/conditional-registration.js.map +1 -1
  8. package/dist/index.js +82 -99
  9. package/dist/index.js.map +1 -1
  10. package/dist/preference-file.d.ts +16 -0
  11. package/dist/preference-file.d.ts.map +1 -0
  12. package/dist/preference-file.js +133 -0
  13. package/dist/preference-file.js.map +1 -0
  14. package/dist/profiles.d.ts +1 -3
  15. package/dist/profiles.d.ts.map +1 -1
  16. package/dist/profiles.js +60 -107
  17. package/dist/profiles.js.map +1 -1
  18. package/dist/searchConversion.d.ts.map +1 -1
  19. package/dist/searchConversion.js +18 -5
  20. package/dist/searchConversion.js.map +1 -1
  21. package/dist/searchSchema.d.ts +25 -25
  22. package/dist/searchSchema.d.ts.map +1 -1
  23. package/dist/searchSchema.js +5 -5
  24. package/dist/searchSchema.js.map +1 -1
  25. package/dist/token-hashing.d.ts +3 -0
  26. package/dist/token-hashing.d.ts.map +1 -0
  27. package/dist/token-hashing.js +18 -0
  28. package/dist/token-hashing.js.map +1 -0
  29. package/dist/tool-metadata.d.ts +2 -0
  30. package/dist/tool-metadata.d.ts.map +1 -0
  31. package/dist/tool-metadata.js +43 -0
  32. package/dist/tool-metadata.js.map +1 -0
  33. package/dist/tools/change-listeners.d.ts +30 -0
  34. package/dist/tools/change-listeners.d.ts.map +1 -1
  35. package/dist/tools/change-listeners.js +24 -18
  36. package/dist/tools/change-listeners.js.map +1 -1
  37. package/dist/tools/common-schemas.d.ts +2 -0
  38. package/dist/tools/common-schemas.d.ts.map +1 -1
  39. package/dist/tools/common-schemas.js +16 -0
  40. package/dist/tools/common-schemas.js.map +1 -1
  41. package/dist/tools/csv-export.d.ts +1849 -0
  42. package/dist/tools/csv-export.d.ts.map +1 -0
  43. package/dist/tools/csv-export.js +61 -0
  44. package/dist/tools/csv-export.js.map +1 -0
  45. package/dist/tools/generic-layouts.d.ts +332 -0
  46. package/dist/tools/generic-layouts.d.ts.map +1 -0
  47. package/dist/tools/generic-layouts.js +490 -0
  48. package/dist/tools/generic-layouts.js.map +1 -0
  49. package/dist/tools/get-operations.d.ts +16 -0
  50. package/dist/tools/get-operations.d.ts.map +1 -0
  51. package/dist/tools/get-operations.js +63 -0
  52. package/dist/tools/get-operations.js.map +1 -0
  53. package/dist/tools/pages.d.ts +55 -0
  54. package/dist/tools/pages.d.ts.map +1 -1
  55. package/dist/tools/pages.js +217 -209
  56. package/dist/tools/pages.js.map +1 -1
  57. package/dist/tools/ppt-export-schemas.d.ts +16 -16
  58. package/dist/tools/ppt-export.d.ts +1493 -0
  59. package/dist/tools/ppt-export.d.ts.map +1 -1
  60. package/dist/tools/ppt-export.js +23 -17
  61. package/dist/tools/ppt-export.js.map +1 -1
  62. package/dist/tools/profile-management.d.ts +20 -0
  63. package/dist/tools/profile-management.d.ts.map +1 -0
  64. package/dist/tools/profile-management.js +250 -0
  65. package/dist/tools/profile-management.js.map +1 -0
  66. package/dist/tools/references.d.ts +36 -0
  67. package/dist/tools/references.d.ts.map +1 -1
  68. package/dist/tools/references.js +48 -45
  69. package/dist/tools/references.js.map +1 -1
  70. package/dist/tools/richstring-widgets.d.ts +51 -0
  71. package/dist/tools/richstring-widgets.d.ts.map +1 -0
  72. package/dist/tools/richstring-widgets.js +173 -0
  73. package/dist/tools/richstring-widgets.js.map +1 -0
  74. package/dist/tools/schedule.d.ts +14 -0
  75. package/dist/tools/schedule.d.ts.map +1 -1
  76. package/dist/tools/schedule.js +7 -3
  77. package/dist/tools/schedule.js.map +1 -1
  78. package/dist/tools/script-logs.d.ts +29 -0
  79. package/dist/tools/script-logs.d.ts.map +1 -0
  80. package/dist/tools/script-logs.js +144 -0
  81. package/dist/tools/script-logs.js.map +1 -0
  82. package/dist/tools/search.d.ts +1870 -0
  83. package/dist/tools/search.d.ts.map +1 -1
  84. package/dist/tools/search.js +49 -75
  85. package/dist/tools/search.js.map +1 -1
  86. package/dist/tools/system.d.ts +2 -1
  87. package/dist/tools/system.d.ts.map +1 -1
  88. package/dist/tools/system.js +68 -2
  89. package/dist/tools/system.js.map +1 -1
  90. package/dist/tools/type-layouts.d.ts +37 -0
  91. package/dist/tools/type-layouts.d.ts.map +1 -1
  92. package/dist/tools/type-layouts.js +57 -11
  93. package/dist/tools/type-layouts.js.map +1 -1
  94. package/dist/tools/type-management.d.ts +134 -0
  95. package/dist/tools/type-management.d.ts.map +1 -0
  96. package/dist/tools/{workspace.js → type-management.js} +67 -307
  97. package/dist/tools/type-management.js.map +1 -0
  98. package/dist/tools/users.d.ts +19 -0
  99. package/dist/tools/users.d.ts.map +1 -1
  100. package/dist/tools/users.js +14 -28
  101. package/dist/tools/users.js.map +1 -1
  102. package/dist/tools/validators.d.ts +28 -0
  103. package/dist/tools/validators.d.ts.map +1 -1
  104. package/dist/tools/validators.js +21 -15
  105. package/dist/tools/validators.js.map +1 -1
  106. package/dist/tools/version-check.d.ts +4 -0
  107. package/dist/tools/version-check.d.ts.map +1 -0
  108. package/dist/tools/version-check.js +107 -0
  109. package/dist/tools/version-check.js.map +1 -0
  110. package/dist/tools/version-history.d.ts +48 -0
  111. package/dist/tools/version-history.d.ts.map +1 -1
  112. package/dist/tools/version-history.js +39 -29
  113. package/dist/tools/version-history.js.map +1 -1
  114. package/dist/tools/widgets.d.ts +182 -0
  115. package/dist/tools/widgets.d.ts.map +1 -1
  116. package/dist/tools/widgets.js +213 -590
  117. package/dist/tools/widgets.js.map +1 -1
  118. package/dist/tools/workflow-scripts.d.ts +40 -0
  119. package/dist/tools/workflow-scripts.d.ts.map +1 -0
  120. package/dist/tools/workflow-scripts.js +186 -0
  121. package/dist/tools/workflow-scripts.js.map +1 -0
  122. package/dist/tools/workflow.d.ts +70 -0
  123. package/dist/tools/workflow.d.ts.map +1 -0
  124. package/dist/tools/workflow.js +259 -0
  125. package/dist/tools/workflow.js.map +1 -0
  126. package/dist/tools/workspace-admin.d.ts +40 -0
  127. package/dist/tools/workspace-admin.d.ts.map +1 -0
  128. package/dist/tools/workspace-admin.js +125 -0
  129. package/dist/tools/workspace-admin.js.map +1 -0
  130. package/dist/tools/workspace-core.d.ts +45 -0
  131. package/dist/tools/workspace-core.d.ts.map +1 -0
  132. package/dist/tools/workspace-core.js +153 -0
  133. package/dist/tools/workspace-core.js.map +1 -0
  134. package/dist/types.d.ts +3 -3
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/url-parsing.d.ts +6 -0
  137. package/dist/url-parsing.d.ts.map +1 -0
  138. package/dist/url-parsing.js +25 -0
  139. package/dist/url-parsing.js.map +1 -0
  140. package/dist/utils/dateValidation.d.ts +5 -0
  141. package/dist/utils/dateValidation.d.ts.map +1 -0
  142. package/dist/utils/dateValidation.js +57 -0
  143. package/dist/utils/dateValidation.js.map +1 -0
  144. package/dist/utils.js +7 -7
  145. package/dist/utils.js.map +1 -1
  146. package/package.json +1 -1
  147. package/dist/tools/workspace.d.ts +0 -4
  148. package/dist/tools/workspace.d.ts.map +0 -1
  149. package/dist/tools/workspace.js.map +0 -1
@@ -0,0 +1,490 @@
1
+ import { z } from "zod";
2
+ import { debugLogWithTag } from "../logger.js";
3
+ import { PositionSchema, WIDGET_CONFIG_DESCRIPTION } from './common-schemas.js';
4
+ export const LayoutContextSchema = z.union([
5
+ z.object({
6
+ type: z.literal("page"),
7
+ pageUID: z.string().describe("Page UID (e.g., 'page/abc123')")
8
+ }),
9
+ z.object({
10
+ type: z.literal("type"),
11
+ workspaceId: z.string().describe("Workspace ID (e.g., 'workspace123')"),
12
+ typeInternalName: z.string().describe("Type internal name (e.g., 'cf.example.myType')"),
13
+ alternativeLayoutName: z.string().optional().describe("Alternative layout name (optional)")
14
+ })
15
+ ]).describe("Layout target - specify whether operating on page or type layout");
16
+ const TOOL_LAYOUT_GET_OVERVIEW = 'cplace_layout_get_overview';
17
+ const TOOL_LAYOUT_ADD_WIDGET = 'cplace_layout_add_widget';
18
+ const TOOL_LAYOUT_REMOVE_WIDGET = 'cplace_layout_remove_widget';
19
+ const TOOL_LAYOUT_ADD_ROW = 'cplace_layout_add_row';
20
+ const TOOL_LAYOUT_GET_WIDGET_DETAILS = 'cplace_layout_get_widget_details';
21
+ const TOOL_LAYOUT_UPDATE_WIDGET = 'cplace_layout_update_widget';
22
+ const TOOL_LAYOUT_MOVE_WIDGET = 'cplace_layout_move_widget';
23
+ const TOOL_LAYOUT_COMPACT = 'cplace_layout_compact';
24
+ export const GENERIC_LAYOUT_TOOL_DEFINITIONS = {
25
+ [TOOL_LAYOUT_GET_OVERVIEW]: {
26
+ description: "Get layout structure for page or type. Provides an overview of the layout grid including rows, columns, and widget summaries for both page and type layouts.",
27
+ inputSchema: {
28
+ context: LayoutContextSchema
29
+ },
30
+ annotations: { title: "Get Layout Overview" }
31
+ },
32
+ [TOOL_LAYOUT_ADD_WIDGET]: {
33
+ description: "Add widget to page or type layout. Works with both page and type layouts using the same interface and behavior.\n\n⚠️ REQUIRED BEFORE USE:\n- ALWAYS call cplace_get_widget_definition FIRST to understand required fields\n- Many widgets have non-obvious required attributes that will cause validation errors\n- Widget configurations must match the schema exactly\n\nCRITICAL BEHAVIOR:\n- Row creation: ❌ NOT automatic - use cplace_layout_add_row to create rows first\n- Column creation: ❌ NOT automatic - columnIndex only references existing columns\n- Invalid columnIndex: Falls back to last existing column (no error)\n\nTO CREATE SIDE-BY-SIDE LAYOUTS:\n1. First use cplace_layout_add_row to create multi-column structure\n2. Then add widgets to the created columns\n\nEXAMPLES:\n- Add to new row 0: Creates single-column row, widget goes to column 0\n- Add to column 1 when only column 0 exists: Widget goes to column 0 (fallback)\n- Add to pre-created 6/6 row: Works correctly if columns exist\n\nTIP: Always check current layout with cplace_layout_get_overview before adding widgets.",
34
+ inputSchema: {
35
+ context: LayoutContextSchema,
36
+ widgetType: z.string().describe("Widget type identifier (e.g., 'cf.cplace.platform.table', 'cf.platform.wiki')"),
37
+ position: PositionSchema,
38
+ configuration: z.record(z.any()).optional().describe(`${WIDGET_CONFIG_DESCRIPTION}
39
+
40
+ WIDGET-SPECIFIC PATTERNS:
41
+ - Connected widgets (bar/pie charts): Use 'tableWidgetId' to connect to existing table widget
42
+ Example: {'tableWidgetId': 'id_abc123', 'title': {'en': 'Chart Title'}}
43
+ - Attribute widgets: Use 'cf.platform.quotedAttributeName' with single quotes
44
+ Example: {'cf.platform.quotedAttributeName': "'cf.cplace.myAttribute'", 'cf.platform.withLabel': true}
45
+ - Search widgets: Use 'search' with JSON search string
46
+ Example: {'search': '{"filters":[{"types":["test.project"]}]}', 'title': {'en': 'Results'}}`)
47
+ },
48
+ annotations: { title: "Add Widget to Layout" }
49
+ },
50
+ [TOOL_LAYOUT_REMOVE_WIDGET]: {
51
+ description: "Remove widget from page or type layout. Works with both page and type layouts using the same interface.",
52
+ inputSchema: {
53
+ context: LayoutContextSchema,
54
+ widgetId: z.string().describe("The unique identifier of the widget to remove")
55
+ },
56
+ annotations: { title: "Remove Widget from Layout" }
57
+ },
58
+ [TOOL_LAYOUT_ADD_ROW]: {
59
+ description: "Add row structure to page or type layout. Creates new row with specific column layout. Essential for multi-column structures as widget placement alone cannot create columns.",
60
+ inputSchema: {
61
+ context: LayoutContextSchema,
62
+ rowIndex: z.number().min(0).describe("Row index where to insert the new row (0-based). If rowIndex >= current row count, adds at the end. Otherwise, inserts at position and shifts existing rows down."),
63
+ columnProportions: z.array(z.number().min(1)).min(1).describe("Array of column width proportions that must sum to 12 (Bootstrap grid system). Examples: [12] (single column), [6,6] (two equal columns), [4,4,4] (three equal columns), [3,9] (sidebar + main)")
64
+ },
65
+ annotations: { title: "Add Row to Layout" }
66
+ },
67
+ [TOOL_LAYOUT_GET_WIDGET_DETAILS]: {
68
+ description: "Get detailed widget configuration from page or type layout. Extracts specific widget information from the layout structure.",
69
+ inputSchema: {
70
+ context: LayoutContextSchema,
71
+ widgetId: z.string().describe("The unique widget identifier to get details for")
72
+ },
73
+ annotations: { title: "Get Widget Details from Layout" }
74
+ },
75
+ [TOOL_LAYOUT_UPDATE_WIDGET]: {
76
+ description: "Update widget configuration or collapse state in page or type layout. Allows modification of widget properties and display settings.\n\nUSE CASES:\n- Restore configuration after widget moves (configurations may be lost during moves)\n- Update widget connections (e.g., change tableWidgetId after layout modifications)\n- Modify display properties (titles, collapse state, etc.)\n\nTIP: Widget IDs may change after layout operations - always use current IDs from latest layout overview retrieved via cplace_layout_get_overview.",
77
+ inputSchema: {
78
+ context: LayoutContextSchema,
79
+ widgetId: z.string().describe("The unique identifier of the widget to update"),
80
+ newConfiguration: z.record(z.any()).optional().describe(`Updated widget configuration as key-value pairs (optional). ${WIDGET_CONFIG_DESCRIPTION}`),
81
+ collapsed: z.boolean().optional().describe("Widget collapse state (optional)")
82
+ },
83
+ annotations: { title: "Update Widget in Layout" }
84
+ },
85
+ [TOOL_LAYOUT_MOVE_WIDGET]: {
86
+ description: "Move widget to different position in page or type layout. Relocates widget to specified grid position.\n\nMOVE BEHAVIOR:\n- ✅ Can move between existing rows and columns\n- ❌ Cannot create new columns (only references existing ones)\n- Invalid columnIndex: Falls back to last column in target row\n\nCRITICAL WARNINGS:\n- Widget configurations may be LOST during moves\n- Widget IDs may CHANGE - always get new IDs from response\n- Connected widgets (charts) may lose their tableWidgetId references\n\nPOST-MOVE CHECKLIST:\n1. Get new widget ID from response\n2. Use cplace_layout_get_widget_details to check if configuration was preserved\n3. If lost, use cplace_layout_update_widget to restore configuration\n4. Update any widgets that referenced the moved widget's old ID\n\nTIP: For complex layouts, consider removing and re-adding widgets instead of moving.",
87
+ inputSchema: {
88
+ context: LayoutContextSchema,
89
+ widgetId: z.string().describe("The unique identifier of the widget to move"),
90
+ newPosition: PositionSchema
91
+ },
92
+ annotations: { title: "Move Widget in Layout" }
93
+ },
94
+ [TOOL_LAYOUT_COMPACT]: {
95
+ description: "Remove empty rows from page or type layout. Compacts the layout by keeping only rows that contain widgets while preserving order and configurations.",
96
+ inputSchema: {
97
+ context: LayoutContextSchema
98
+ },
99
+ annotations: { title: "Compact Layout" }
100
+ }
101
+ };
102
+ function determineApiEndpoint(context, operation) {
103
+ const baseEndpoint = context.type === "page" ? "json/pageLayout" : "json/typeLayout";
104
+ return baseEndpoint;
105
+ }
106
+ function buildRequestParams(context, additionalParams = {}) {
107
+ if (context.type === "page") {
108
+ return { pageUID: context.pageUID, ...additionalParams };
109
+ }
110
+ else {
111
+ return {
112
+ workspaceId: context.workspaceId,
113
+ typeInternalName: context.typeInternalName,
114
+ ...(context.alternativeLayoutName && { alternativeLayoutName: context.alternativeLayoutName }),
115
+ ...additionalParams
116
+ };
117
+ }
118
+ }
119
+ async function handleLayoutOperation(client, context, operation, params = {}) {
120
+ const endpoint = determineApiEndpoint(context, operation);
121
+ const requestParams = buildRequestParams(context, params);
122
+ debugLogWithTag('LAYOUT', `${operation} operation on ${context.type} layout via ${endpoint}`);
123
+ if (operation === 'getOverview') {
124
+ return await client.makeApiRequest(endpoint, 'GET', requestParams);
125
+ }
126
+ else {
127
+ const requestBody = {
128
+ ...requestParams,
129
+ operation: { type: operation, ...params }
130
+ };
131
+ return await client.makeApiRequest(endpoint, 'PATCH', undefined, requestBody);
132
+ }
133
+ }
134
+ function mapOperationName(context, operation) {
135
+ const operationMapping = {
136
+ page: {
137
+ 'add_widget': 'ADD',
138
+ 'remove_widget': 'REMOVE',
139
+ 'update_widget': 'UPDATE',
140
+ 'move_widget': 'MOVE',
141
+ 'add_row': 'ADD_ROW',
142
+ 'compact': 'COMPACT'
143
+ },
144
+ type: {
145
+ 'add_widget': 'ADD',
146
+ 'remove_widget': 'REMOVE',
147
+ 'update_widget': 'UPDATE',
148
+ 'move_widget': 'MOVE',
149
+ 'add_row': 'ADD',
150
+ 'compact': 'COMPACT'
151
+ }
152
+ };
153
+ const contextMapping = operationMapping[context.type];
154
+ return contextMapping[operation] || operation;
155
+ }
156
+ export function registerLayoutTools(server, client) {
157
+ server.registerTool(TOOL_LAYOUT_GET_OVERVIEW, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_GET_OVERVIEW], async ({ context }) => {
158
+ debugLogWithTag('LAYOUT', `Starting layout overview request for ${context.type} layout`);
159
+ try {
160
+ const result = await handleLayoutOperation(client, context, 'getOverview');
161
+ const overview = {
162
+ context,
163
+ rows: result.rows?.map((row, rowIndex) => ({
164
+ rowIndex,
165
+ columns: row.columns?.map((column, colIndex) => ({
166
+ columnIndex: colIndex,
167
+ proportion: column.proportion,
168
+ widgets: column.widgets?.map((widget) => ({
169
+ id: widget.id,
170
+ widgetType: widget.widgetType,
171
+ configurationCount: widget.configuration?.length || 0,
172
+ validationStatus: widget.validationStatus || null
173
+ })) || []
174
+ })) || []
175
+ })) || []
176
+ };
177
+ debugLogWithTag('LAYOUT', `Retrieved ${context.type} layout overview successfully`);
178
+ return {
179
+ content: [{ type: "text", text: JSON.stringify(overview, null, 2) }]
180
+ };
181
+ }
182
+ catch (error) {
183
+ debugLogWithTag('LAYOUT', `Error getting layout overview: ${error instanceof Error ? error.message : String(error)}`);
184
+ return {
185
+ content: [{
186
+ type: "text",
187
+ text: `Error getting ${context.type} layout overview: ${error instanceof Error ? error.message : String(error)}`
188
+ }],
189
+ isError: true
190
+ };
191
+ }
192
+ });
193
+ server.registerTool(TOOL_LAYOUT_ADD_WIDGET, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_ADD_WIDGET], async ({ context, widgetType, position, configuration }) => {
194
+ debugLogWithTag('LAYOUT', `Adding widget ${widgetType} to ${context.type} layout`);
195
+ try {
196
+ const operationType = mapOperationName(context, 'add_widget');
197
+ const operationParams = {
198
+ widgetType,
199
+ position: {
200
+ rowIndex: position.rowIndex,
201
+ columnIndex: position.columnIndex,
202
+ widgetIndex: position.widgetIndex
203
+ }
204
+ };
205
+ if (configuration && Object.keys(configuration).length > 0) {
206
+ operationParams.configuration = configuration;
207
+ debugLogWithTag('LAYOUT', `Including configuration: ${JSON.stringify(Object.keys(configuration))}`);
208
+ }
209
+ const result = await handleLayoutOperation(client, context, operationType, operationParams);
210
+ debugLogWithTag('LAYOUT', `Successfully added widget to ${context.type} layout`);
211
+ const response = {
212
+ operation: "ADD",
213
+ status: "SUCCESS",
214
+ context,
215
+ widgetType,
216
+ position,
217
+ validationStatus: result.status || null,
218
+ validationDetails: result.validationDetails || null,
219
+ message: `Widget added successfully to ${context.type} layout`
220
+ };
221
+ return {
222
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
223
+ };
224
+ }
225
+ catch (error) {
226
+ debugLogWithTag('LAYOUT', `Error adding widget: ${error instanceof Error ? error.message : String(error)}`);
227
+ const errorResponse = {
228
+ operation: "ADD",
229
+ status: "ERROR",
230
+ context,
231
+ widgetType,
232
+ position,
233
+ error: error instanceof Error ? error.message : String(error),
234
+ message: `Failed to add widget to ${context.type} layout`
235
+ };
236
+ return {
237
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
238
+ isError: true
239
+ };
240
+ }
241
+ });
242
+ server.registerTool(TOOL_LAYOUT_REMOVE_WIDGET, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_REMOVE_WIDGET], async ({ context, widgetId }) => {
243
+ debugLogWithTag('LAYOUT', `Removing widget ${widgetId} from ${context.type} layout`);
244
+ try {
245
+ const operationType = mapOperationName(context, 'remove_widget');
246
+ const result = await handleLayoutOperation(client, context, operationType, { widgetId });
247
+ debugLogWithTag('LAYOUT', `Successfully removed widget from ${context.type} layout`);
248
+ const response = {
249
+ operation: "REMOVE",
250
+ status: "SUCCESS",
251
+ context,
252
+ widgetId,
253
+ message: `Widget removed successfully from ${context.type} layout`
254
+ };
255
+ return {
256
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
257
+ };
258
+ }
259
+ catch (error) {
260
+ debugLogWithTag('LAYOUT', `Error removing widget: ${error instanceof Error ? error.message : String(error)}`);
261
+ const errorResponse = {
262
+ operation: "REMOVE",
263
+ status: "ERROR",
264
+ context,
265
+ widgetId,
266
+ error: error instanceof Error ? error.message : String(error),
267
+ message: `Failed to remove widget from ${context.type} layout`
268
+ };
269
+ return {
270
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
271
+ isError: true
272
+ };
273
+ }
274
+ });
275
+ server.registerTool(TOOL_LAYOUT_ADD_ROW, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_ADD_ROW], async ({ context, rowIndex, columnProportions }) => {
276
+ debugLogWithTag('LAYOUT', `Adding row ${rowIndex} with proportions ${JSON.stringify(columnProportions)} to ${context.type} layout`);
277
+ try {
278
+ const operationType = mapOperationName(context, 'add_row');
279
+ const result = await handleLayoutOperation(client, context, operationType, {
280
+ rowIndex,
281
+ columnProportions
282
+ });
283
+ debugLogWithTag('LAYOUT', `Successfully added row to ${context.type} layout`);
284
+ const response = {
285
+ operation: "ADD_ROW",
286
+ status: "SUCCESS",
287
+ context,
288
+ rowIndex,
289
+ columnProportions,
290
+ columnsCreated: columnProportions.length,
291
+ message: `Row added successfully to ${context.type} layout with ${columnProportions.length} column${columnProportions.length === 1 ? '' : 's'} [${columnProportions.join(',')}]`
292
+ };
293
+ return {
294
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
295
+ };
296
+ }
297
+ catch (error) {
298
+ debugLogWithTag('LAYOUT', `Error adding row: ${error instanceof Error ? error.message : String(error)}`);
299
+ const errorResponse = {
300
+ operation: "ADD_ROW",
301
+ status: "ERROR",
302
+ context,
303
+ rowIndex,
304
+ columnProportions,
305
+ error: error instanceof Error ? error.message : String(error),
306
+ message: `Failed to add row to ${context.type} layout`
307
+ };
308
+ return {
309
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
310
+ isError: true
311
+ };
312
+ }
313
+ });
314
+ server.registerTool(TOOL_LAYOUT_GET_WIDGET_DETAILS, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_GET_WIDGET_DETAILS], async ({ context, widgetId }) => {
315
+ debugLogWithTag('LAYOUT', `Getting widget details for ${widgetId} from ${context.type} layout`);
316
+ try {
317
+ const layoutResult = await handleLayoutOperation(client, context, 'getOverview');
318
+ let foundWidget = null;
319
+ const findWidget = (rows) => {
320
+ for (const row of rows || []) {
321
+ for (const column of row.columns || []) {
322
+ for (const widget of column.widgets || []) {
323
+ if (widget.id === widgetId) {
324
+ return widget;
325
+ }
326
+ if (widget.widgetsLayout?.rows) {
327
+ const nestedWidget = findWidget(widget.widgetsLayout.rows);
328
+ if (nestedWidget)
329
+ return nestedWidget;
330
+ }
331
+ }
332
+ }
333
+ }
334
+ return null;
335
+ };
336
+ foundWidget = findWidget(layoutResult.rows);
337
+ if (!foundWidget) {
338
+ return {
339
+ content: [{ type: "text", text: `Widget with ID ${widgetId} not found in ${context.type} layout` }]
340
+ };
341
+ }
342
+ debugLogWithTag('LAYOUT', `Retrieved widget details for: ${widgetId} from ${context.type} layout`);
343
+ const response = {
344
+ context,
345
+ widgetId,
346
+ widget: foundWidget,
347
+ validationStatus: foundWidget.validationStatus || null
348
+ };
349
+ return {
350
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
351
+ };
352
+ }
353
+ catch (error) {
354
+ debugLogWithTag('LAYOUT', `Error getting widget details: ${error instanceof Error ? error.message : String(error)}`);
355
+ return {
356
+ content: [{
357
+ type: "text",
358
+ text: `Error getting widget details from ${context.type} layout: ${error instanceof Error ? error.message : String(error)}`
359
+ }],
360
+ isError: true
361
+ };
362
+ }
363
+ });
364
+ server.registerTool(TOOL_LAYOUT_UPDATE_WIDGET, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_UPDATE_WIDGET], async ({ context, widgetId, newConfiguration, collapsed }) => {
365
+ debugLogWithTag('LAYOUT', `Updating widget ${widgetId} in ${context.type} layout`);
366
+ try {
367
+ const operationType = mapOperationName(context, 'update_widget');
368
+ const operationParams = {
369
+ widgetId
370
+ };
371
+ if (newConfiguration && Object.keys(newConfiguration).length > 0) {
372
+ operationParams.newConfiguration = newConfiguration;
373
+ debugLogWithTag('LAYOUT', `Including new configuration: ${JSON.stringify(Object.keys(newConfiguration))}`);
374
+ }
375
+ if (collapsed !== undefined) {
376
+ operationParams.collapsed = collapsed;
377
+ debugLogWithTag('LAYOUT', `Setting collapsed state to: ${collapsed}`);
378
+ }
379
+ if (!operationParams.newConfiguration && operationParams.collapsed === undefined) {
380
+ return {
381
+ content: [{ type: "text", text: "No updates specified. At least one of newConfiguration or collapsed must be provided." }]
382
+ };
383
+ }
384
+ const result = await handleLayoutOperation(client, context, operationType, operationParams);
385
+ debugLogWithTag('LAYOUT', `Successfully updated widget in ${context.type} layout`);
386
+ const response = {
387
+ operation: "UPDATE",
388
+ status: "SUCCESS",
389
+ context,
390
+ widgetId,
391
+ validationStatus: result.status || null,
392
+ validationDetails: result.validationDetails || null,
393
+ message: `Widget updated successfully in ${context.type} layout`
394
+ };
395
+ return {
396
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
397
+ };
398
+ }
399
+ catch (error) {
400
+ debugLogWithTag('LAYOUT', `Error updating widget: ${error instanceof Error ? error.message : String(error)}`);
401
+ const errorResponse = {
402
+ operation: "UPDATE",
403
+ status: "ERROR",
404
+ context,
405
+ widgetId,
406
+ error: error instanceof Error ? error.message : String(error),
407
+ message: `Failed to update widget in ${context.type} layout`
408
+ };
409
+ return {
410
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
411
+ isError: true
412
+ };
413
+ }
414
+ });
415
+ server.registerTool(TOOL_LAYOUT_MOVE_WIDGET, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_MOVE_WIDGET], async ({ context, widgetId, newPosition }) => {
416
+ debugLogWithTag('LAYOUT', `Moving widget ${widgetId} in ${context.type} layout to position ${JSON.stringify(newPosition)}`);
417
+ try {
418
+ const operationType = mapOperationName(context, 'move_widget');
419
+ const operationParams = {
420
+ widgetId,
421
+ newPosition: {
422
+ rowIndex: newPosition.rowIndex,
423
+ columnIndex: newPosition.columnIndex,
424
+ widgetIndex: newPosition.widgetIndex
425
+ }
426
+ };
427
+ const result = await handleLayoutOperation(client, context, operationType, operationParams);
428
+ debugLogWithTag('LAYOUT', `Successfully moved widget in ${context.type} layout`);
429
+ const response = {
430
+ operation: "MOVE",
431
+ status: "SUCCESS",
432
+ context,
433
+ oldWidgetId: widgetId,
434
+ newPosition,
435
+ message: `Widget moved successfully in ${context.type} layout`
436
+ };
437
+ return {
438
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
439
+ };
440
+ }
441
+ catch (error) {
442
+ debugLogWithTag('LAYOUT', `Error moving widget: ${error instanceof Error ? error.message : String(error)}`);
443
+ const errorResponse = {
444
+ operation: "MOVE",
445
+ status: "ERROR",
446
+ context,
447
+ oldWidgetId: widgetId,
448
+ newPosition,
449
+ error: error instanceof Error ? error.message : String(error),
450
+ message: `Failed to move widget in ${context.type} layout`
451
+ };
452
+ return {
453
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
454
+ isError: true
455
+ };
456
+ }
457
+ });
458
+ server.registerTool(TOOL_LAYOUT_COMPACT, GENERIC_LAYOUT_TOOL_DEFINITIONS[TOOL_LAYOUT_COMPACT], async ({ context }) => {
459
+ debugLogWithTag('LAYOUT', `Compacting ${context.type} layout`);
460
+ try {
461
+ const operationType = mapOperationName(context, 'compact');
462
+ const result = await handleLayoutOperation(client, context, operationType);
463
+ debugLogWithTag('LAYOUT', `Successfully compacted ${context.type} layout`);
464
+ const response = {
465
+ operation: "COMPACT_LAYOUT",
466
+ status: "SUCCESS",
467
+ context,
468
+ message: `Layout compacted successfully - empty rows removed from ${context.type} layout`
469
+ };
470
+ return {
471
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }]
472
+ };
473
+ }
474
+ catch (error) {
475
+ debugLogWithTag('LAYOUT', `Error compacting layout: ${error instanceof Error ? error.message : String(error)}`);
476
+ const errorResponse = {
477
+ operation: "COMPACT_LAYOUT",
478
+ status: "ERROR",
479
+ context,
480
+ error: error instanceof Error ? error.message : String(error),
481
+ message: `Failed to compact ${context.type} layout`
482
+ };
483
+ return {
484
+ content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }],
485
+ isError: true
486
+ };
487
+ }
488
+ });
489
+ }
490
+ //# sourceMappingURL=generic-layouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-layouts.js","sourceRoot":"","sources":["../../src/tools/generic-layouts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { CplaceApiClient } from '../api.js';
4
+ export declare const GET_OPERATIONS_TOOL_DEFINITIONS: {
5
+ readonly cplace_get_by_uid: {
6
+ readonly description: "Get entity by UID. Retrieves detailed information for a page or person by their UID. Entity type is automatically detected from the UID format (page/... or person/...).";
7
+ readonly inputSchema: {
8
+ readonly uid: z.ZodString;
9
+ };
10
+ readonly annotations: {
11
+ readonly title: "Get Entity by UID";
12
+ };
13
+ };
14
+ };
15
+ export declare function registerGetOperationTools(server: McpServer, client: CplaceApiClient): void;
16
+ //# sourceMappingURL=get-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-operations.d.ts","sourceRoot":"","sources":["../../src/tools/get-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQ5C,eAAO,MAAM,+BAA+B;;;;;;;;;;CAQlC,CAAC;AAEX,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,QA8DnF"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ import { debugLogWithTag } from "../logger.js";
3
+ import { truncateDocumentSummaries } from "../utils.js";
4
+ const TOOL_GET_BY_UID = 'cplace_get_by_uid';
5
+ export const GET_OPERATIONS_TOOL_DEFINITIONS = {
6
+ [TOOL_GET_BY_UID]: {
7
+ description: "Get entity by UID. Retrieves detailed information for a page or person by their UID. Entity type is automatically detected from the UID format (page/... or person/...).",
8
+ inputSchema: {
9
+ uid: z.string().describe("The unique identifier. For pages: 'page/abc123'. For persons: 'person/user456'. Entity type is auto-detected from the prefix.")
10
+ },
11
+ annotations: { title: "Get Entity by UID" }
12
+ }
13
+ };
14
+ export function registerGetOperationTools(server, client) {
15
+ server.registerTool(TOOL_GET_BY_UID, GET_OPERATIONS_TOOL_DEFINITIONS[TOOL_GET_BY_UID], async ({ uid }) => {
16
+ debugLogWithTag('GET_BY_UID', `Getting with uid: ${uid}`);
17
+ try {
18
+ let entityType;
19
+ if (uid.startsWith('page/')) {
20
+ entityType = 'page';
21
+ }
22
+ else if (uid.startsWith('person/')) {
23
+ entityType = 'person';
24
+ }
25
+ else {
26
+ return {
27
+ content: [{
28
+ type: "text",
29
+ text: `Invalid UID format: '${uid}'. UID must start with 'page/' or 'person/'.`
30
+ }],
31
+ isError: true
32
+ };
33
+ }
34
+ const endpoints = {
35
+ page: 'json/page',
36
+ person: 'json/person'
37
+ };
38
+ const paramNames = {
39
+ page: 'pageUID',
40
+ person: 'id'
41
+ };
42
+ const result = await client.makeApiRequest(endpoints[entityType], 'GET', { [paramNames[entityType]]: uid });
43
+ if (entityType === 'page' && result.documents && Array.isArray(result.documents)) {
44
+ result.documents = truncateDocumentSummaries(result.documents);
45
+ }
46
+ debugLogWithTag('GET_BY_ID', `Successfully retrieved ${entityType}: ${uid}`);
47
+ return {
48
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
49
+ };
50
+ }
51
+ catch (error) {
52
+ debugLogWithTag('GET_BY_ID', `Error getting entity: ${error instanceof Error ? error.message : String(error)}`);
53
+ return {
54
+ content: [{
55
+ type: "text",
56
+ text: `Error retrieving entity: ${error instanceof Error ? error.message : String(error)}`
57
+ }],
58
+ isError: true
59
+ };
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=get-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-operations.js","sourceRoot":"","sources":["../../src/tools/get-operations.ts"],"names":[],"mappings":"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"}