@cplace/mcp-server 1.5.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,20 +18,23 @@ claude mcp add --transport http cplace https://mcp.cplace.com --header "cplace-u
18
18
  #### Claude Desktop
19
19
  ```json
20
20
  {
21
- "mcpServers": {
22
- "cplace": {
23
- "type": "http",
24
- "url": "https://mcp.cplace.com",
25
- "headers": {
26
- "cplace-url": "https://${CPLACE_PROJECT_API_TOKEN}@base.cplace.io"
21
+ "mcpServers": {
22
+ "cplace": {
23
+ "command": "/npx",
24
+ "args": [
25
+ "--ignore-existing",
26
+ "-y",
27
+ "@cplace/mcp-server@latest"
28
+ ],
29
+ "env": {
30
+ "CPLACE_URL": "https://base.cplace.io/",
31
+ "API_TOKEN": "****"
32
+ }
27
33
  }
28
- }
29
- }
34
+ }
30
35
  }
31
36
  ```
32
37
 
33
- Authentication is handled through the remote server's OAuth flow — no API token configuration needed in the MCP client.
34
-
35
38
  ### Local Installation (Alternative)
36
39
 
37
40
  If you prefer to run the MCP server locally (e.g., for development or air-gapped environments), you can install it via npx.
@@ -43,31 +46,31 @@ By default, only the core tools are loaded. Add this entry to your Claude Deskto
43
46
  **Option 1: Separate credentials (traditional)**
44
47
  ```json
45
48
  {
46
- "mcpServers": {
47
- "cplace": {
48
- "command": "npx",
49
- "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
50
- "env": {
51
- "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
52
- "API_TOKEN": "your-api-token"
49
+ "mcpServers": {
50
+ "cplace": {
51
+ "command": "npx",
52
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
53
+ "env": {
54
+ "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
55
+ "API_TOKEN": "your-api-token"
56
+ }
53
57
  }
54
- }
55
- }
58
+ }
56
59
  }
57
60
  ```
58
61
 
59
62
  **Option 2: URL-embedded credentials**
60
63
  ```json
61
64
  {
62
- "mcpServers": {
63
- "cplace": {
64
- "command": "npx",
65
- "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
66
- "env": {
67
- "CPLACE_URL": "https://your-api-token@your-cplace-instance.com/your-tenant"
65
+ "mcpServers": {
66
+ "cplace": {
67
+ "command": "npx",
68
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
69
+ "env": {
70
+ "CPLACE_URL": "https://your-api-token@your-cplace-instance.com/your-tenant"
71
+ }
68
72
  }
69
- }
70
- }
73
+ }
71
74
  }
72
75
  ```
73
76
 
@@ -116,7 +119,7 @@ By default, `npx` installs the latest version of the MCP server. To install a sp
116
119
  @cplace/mcp-server@0.1.15
117
120
  ```
118
121
 
119
- instead of
122
+ instead of
120
123
 
121
124
  ```
122
125
  @cplace/mcp-server@latest
@@ -148,10 +151,10 @@ The following configuration properties must be set for API Token authentication
148
151
  ## Usage
149
152
 
150
153
  1. Obtain an API Token for your cplace system (see [cplace documentation](https://docs.cplace.io/lowcode/low-code-cli/authentication/))
151
- * Navigate to your user profile in cplace
152
- * Click on "Action" -> "View my API Tokens" ![api-tokens.png](api-tokens.png)
153
- * Create a new API Token
154
- * Copy the token value ![copy-token.png](copy-token.png)
154
+ * Navigate to your user profile in cplace
155
+ * Click on "Action" -> "View my API Tokens" ![api-tokens.png](api-tokens.png)
156
+ * Create a new API Token
157
+ * Copy the token value ![copy-token.png](copy-token.png)
155
158
  2. Configure your credentials (see Installation section above)
156
159
  3. If Claude Desktop is running, close it
157
160
  4. Add the MCP server configuration to Claude Desktop
@@ -204,16 +207,16 @@ If you're using a local MCP server installation, you can downgrade to match the
204
207
  Example for Claude Desktop:
205
208
  ```json
206
209
  {
207
- "mcpServers": {
208
- "cplace": {
209
- "command": "npx",
210
- "args": ["--ignore-existing", "-y", "@cplace/mcp-server@1.0.2"],
211
- "env": {
212
- "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
213
- "API_TOKEN": "your-api-token"
210
+ "mcpServers": {
211
+ "cplace": {
212
+ "command": "npx",
213
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@1.0.2"],
214
+ "env": {
215
+ "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
216
+ "API_TOKEN": "your-api-token"
217
+ }
214
218
  }
215
- }
216
- }
219
+ }
217
220
  }
218
221
  ```
219
222
 
@@ -243,16 +246,16 @@ The MCP server will automatically upgrade to the latest version on the next rest
243
246
  Example for Claude Desktop (auto-upgrade to latest):
244
247
  ```json
245
248
  {
246
- "mcpServers": {
247
- "cplace": {
248
- "command": "npx",
249
- "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
250
- "env": {
251
- "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
252
- "API_TOKEN": "your-api-token"
249
+ "mcpServers": {
250
+ "cplace": {
251
+ "command": "npx",
252
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
253
+ "env": {
254
+ "CPLACE_URL": "https://your-cplace-instance.com/your-tenant",
255
+ "API_TOKEN": "your-api-token"
256
+ }
253
257
  }
254
- }
255
- }
258
+ }
256
259
  }
257
260
  ```
258
261
 
@@ -260,7 +263,38 @@ Close and reopen Claude Desktop to apply the changes, then run the version check
260
263
 
261
264
  ## Changing the cplace System
262
265
 
263
- To change `CPLACE_URL` or `API_TOKEN`, update the values in the Claude Desktop configuration, then close & reopen Claude Desktop.
266
+ There are two approaches for working with multiple cplace systems:
267
+
268
+ **Option A: Edit and restart**
269
+ Update the `CPLACE_URL` and/or `API_TOKEN` values in the Claude Desktop configuration, then close & reopen Claude Desktop.
270
+
271
+ **Option B: Multiple labeled entries (recommended for frequent switching)**
272
+ Define a separate entry per system under `mcpServers`, each with a distinct key (e.g., `cplace-dev`, `cplace-prod`). Disable unused entries by removing them or commenting them out — Claude Desktop does not support disabling entries without removing them from the config.
273
+
274
+ ```json
275
+ {
276
+ "mcpServers": {
277
+ "cplace-dev": {
278
+ "command": "npx",
279
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
280
+ "env": {
281
+ "CPLACE_URL": "https://dev.cplace.io/tenant",
282
+ "API_TOKEN": "dev-token"
283
+ }
284
+ },
285
+ "cplace-prod": {
286
+ "command": "npx",
287
+ "args": ["--ignore-existing", "-y", "@cplace/mcp-server@latest"],
288
+ "env": {
289
+ "CPLACE_URL": "https://prod.cplace.io/tenant",
290
+ "API_TOKEN": "prod-token"
291
+ }
292
+ }
293
+ }
294
+ }
295
+ ```
296
+
297
+ Keep only the entry for the system you are currently working with active. Remove or comment out the others to avoid loading unused tools into Claude's context.
264
298
 
265
299
  ## Profile System
266
300
 
@@ -463,6 +497,10 @@ Schedule analysis and cross-schedule dependencies.
463
497
 
464
498
  - `cplace_get_schedule_links` - Get schedule dependencies and links between work packages
465
499
 
500
+ ## Troubleshooting
501
+
502
+ For common issues and solutions, see [TROUBLESHOOTING.md](TROUBLESHOOTING.md).
503
+
466
504
  ## Development
467
505
 
468
506
  For development setup, contribution guidelines, and extending the server, see [DEVELOPMENT.md](DEVELOPMENT.md).
@@ -1 +1 @@
1
- {"version":3,"file":"conditional-registration.d.ts","sourceRoot":"","sources":["../src/conditional-registration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAmE3C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,IAAI,CAeN"}
1
+ {"version":3,"file":"conditional-registration.d.ts","sourceRoot":"","sources":["../src/conditional-registration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAqE3C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,IAAI,CAeN"}
@@ -27,6 +27,7 @@ import { registerBoardWidgetTools } from './tools/board-widget.js';
27
27
  import { registerUrlResolutionTools } from './tools/url-resolution.js';
28
28
  import { registerLayoutTools } from './tools/layout.js';
29
29
  import { registerSolutionPackageTools } from './tools/solution-packages.js';
30
+ import { registerLintingTools } from './tools/linting.js';
30
31
  const MODULE_REGISTRY = {
31
32
  'workspace-core': registerWorkspaceCoreTools,
32
33
  'workspace-admin': registerWorkspaceAdminTools,
@@ -54,7 +55,8 @@ const MODULE_REGISTRY = {
54
55
  'board-widget': registerBoardWidgetTools,
55
56
  'url-resolution': registerUrlResolutionTools,
56
57
  'layout': registerLayoutTools,
57
- 'solution-packages': registerSolutionPackageTools
58
+ 'solution-packages': registerSolutionPackageTools,
59
+ 'linting': registerLintingTools,
58
60
  };
59
61
  export function registerActiveTools(server, client, activeGroups) {
60
62
  const requiredModules = getRequiredModules(activeGroups);
@@ -1 +1 @@
1
- {"version":3,"file":"conditional-registration.js","sourceRoot":"","sources":["../src/conditional-registration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditional-registration.js","sourceRoot":"","sources":["../src/conditional-registration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface LintMessage {
2
+ line: number;
3
+ column: number;
4
+ severity: 'error' | 'warning';
5
+ message: string;
6
+ ruleId: string | null;
7
+ }
8
+ export interface LintResult {
9
+ errors: LintMessage[];
10
+ warnings: LintMessage[];
11
+ summary: string;
12
+ }
13
+ export declare function lintScript(script: string): LintResult;
14
+ //# sourceMappingURL=linter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AA+FA,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAgCD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CASrD"}
package/dist/linter.js ADDED
@@ -0,0 +1,113 @@
1
+ import { Linter } from 'eslint';
2
+ const linter = new Linter({ configType: 'flat' });
3
+ const CPLACE_GLOBALS = {
4
+ attributeMappingPage: 'readonly',
5
+ attributeName: 'readonly',
6
+ changeEvent: 'readonly',
7
+ Components: 'readonly',
8
+ context: 'readonly',
9
+ cplace: 'readonly',
10
+ CustomAttributeConditions: 'readonly',
11
+ customAttribute: 'readonly',
12
+ DateTime: 'readonly',
13
+ Days: 'readonly',
14
+ embeddingPage: 'readonly',
15
+ Filters: 'readonly',
16
+ HashSet: 'readonly',
17
+ importValues: 'readonly',
18
+ info: 'readonly',
19
+ interfaceDefinitionPage: 'readonly',
20
+ Iterables: 'readonly',
21
+ jobParameters: 'readonly',
22
+ log: 'readonly',
23
+ messages: 'readonly',
24
+ page: 'readonly',
25
+ pages: 'readonly',
26
+ permissionPropagator: 'readonly',
27
+ report: 'readonly',
28
+ request: 'readonly',
29
+ Search: 'readonly',
30
+ searchResults: 'readonly',
31
+ state: 'readonly',
32
+ wizard: 'readonly',
33
+ writersAssignment: 'readonly',
34
+ additionalData: 'writable',
35
+ selectedActiveLayout: 'writable',
36
+ selectedLayouts: 'writable',
37
+ };
38
+ const CPLACE_RULES = {
39
+ 'no-cond-assign': ['error', 'always'],
40
+ 'no-const-assign': 'error',
41
+ 'no-unsafe-finally': 'off',
42
+ 'no-unmodified-loop-condition': 'error',
43
+ 'no-unreachable-loop': 'error',
44
+ 'no-use-before-define': ['error', { functions: false }],
45
+ 'block-scoped-var': 'error',
46
+ 'camelcase': ['error', { ignoreGlobals: true }],
47
+ 'no-mixed-operators': 'error',
48
+ 'no-param-reassign': 'error',
49
+ 'no-useless-return': 'error',
50
+ 'curly': 'error',
51
+ 'no-var': 'error',
52
+ 'prefer-const': 'warn',
53
+ 'no-duplicate-imports': 'error',
54
+ 'no-console': 'warn',
55
+ 'no-debugger': 'warn',
56
+ 'no-unused-vars': ['error', {
57
+ varsIgnorePattern: '^_',
58
+ argsIgnorePattern: '^_',
59
+ caughtErrorsIgnorePattern: '^_',
60
+ }],
61
+ };
62
+ const CPLACE_CONFIG = [
63
+ {
64
+ languageOptions: {
65
+ ecmaVersion: 'latest',
66
+ sourceType: 'commonjs',
67
+ parserOptions: {
68
+ ecmaFeatures: { globalReturn: true },
69
+ },
70
+ globals: CPLACE_GLOBALS,
71
+ },
72
+ rules: CPLACE_RULES,
73
+ },
74
+ ];
75
+ function toLintMessage(msg) {
76
+ return {
77
+ line: msg.line,
78
+ column: msg.column,
79
+ severity: msg.severity === 2 ? 'error' : 'warning',
80
+ message: msg.message,
81
+ ruleId: msg.ruleId,
82
+ };
83
+ }
84
+ function formatSummary(errors, warnings) {
85
+ if (errors.length === 0 && warnings.length === 0) {
86
+ return 'No lint issues found.';
87
+ }
88
+ const lines = [];
89
+ if (errors.length > 0) {
90
+ lines.push(`${errors.length} error(s):`);
91
+ for (const e of errors) {
92
+ lines.push(` Line ${e.line}:${e.column} — ${e.message} (${e.ruleId})`);
93
+ }
94
+ }
95
+ if (warnings.length > 0) {
96
+ lines.push(`${warnings.length} warning(s):`);
97
+ for (const w of warnings) {
98
+ lines.push(` Line ${w.line}:${w.column} — ${w.message} (${w.ruleId})`);
99
+ }
100
+ }
101
+ return lines.join('\n');
102
+ }
103
+ export function lintScript(script) {
104
+ const messages = linter.verify(script, CPLACE_CONFIG);
105
+ const errors = messages.filter(m => m.severity === 2).map(toLintMessage);
106
+ const warnings = messages.filter(m => m.severity === 1).map(toLintMessage);
107
+ return {
108
+ errors,
109
+ warnings,
110
+ summary: formatSummary(errors, warnings),
111
+ };
112
+ }
113
+ //# sourceMappingURL=linter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"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"}
package/dist/profiles.js CHANGED
@@ -23,7 +23,7 @@ export const TOOL_GROUPS = {
23
23
  },
24
24
  'low-code': {
25
25
  description: "Validators, change listeners, workflow management, script logs, script execution, and job monitoring",
26
- modules: ['validators', 'change-listeners', 'workflow', 'workflow-scripts', 'script-logs', 'script']
26
+ modules: ['validators', 'change-listeners', 'workflow', 'workflow-scripts', 'script-logs', 'script', 'linting']
27
27
  },
28
28
  'jobs': {
29
29
  description: "Job monitoring",
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../src/tool-metadata.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuBvE,CAAC"}
1
+ {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../src/tool-metadata.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwBvE,CAAC"}
@@ -20,6 +20,7 @@ import { GET_OPERATIONS_TOOL_DEFINITIONS } from './tools/get-operations.js';
20
20
  import { JOBS_TOOL_DEFINITIONS } from './tools/jobs.js';
21
21
  import { LAYOUT_TOOL_DEFINITIONS } from './tools/layout.js';
22
22
  import { SOLUTION_PACKAGE_TOOL_DEFINITIONS } from './tools/solution-packages.js';
23
+ import { LINTING_TOOL_DEFINITIONS } from './tools/linting.js';
23
24
  export const MODULE_TOOL_DEFINITIONS = {
24
25
  'profile-management': PROFILE_MANAGEMENT_TOOL_DEFINITIONS,
25
26
  'workspace-core': WORKSPACE_CORE_TOOL_DEFINITIONS,
@@ -42,6 +43,7 @@ export const MODULE_TOOL_DEFINITIONS = {
42
43
  'get-operations': GET_OPERATIONS_TOOL_DEFINITIONS,
43
44
  'jobs': JOBS_TOOL_DEFINITIONS,
44
45
  'layout': LAYOUT_TOOL_DEFINITIONS,
45
- 'solution-packages': SOLUTION_PACKAGE_TOOL_DEFINITIONS
46
+ 'solution-packages': SOLUTION_PACKAGE_TOOL_DEFINITIONS,
47
+ 'linting': LINTING_TOOL_DEFINITIONS,
46
48
  };
47
49
  //# sourceMappingURL=tool-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.js","sourceRoot":"","sources":["../src/tool-metadata.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mCAAmC,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAMjF,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,oBAAoB,EAAE,mCAAmC;IACzD,gBAAgB,EAAE,+BAA+B;IACjD,iBAAiB,EAAE,gCAAgC;IACnD,OAAO,EAAE,qBAAqB;IAC9B,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2BAA2B;IACzC,UAAU,EAAE,yBAAyB;IACrC,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,uBAAuB;IACjC,iBAAiB,EAAE,gCAAgC;IACnD,YAAY,EAAE,0BAA0B;IACxC,kBAAkB,EAAE,gCAAgC;IACpD,YAAY,EAAE,2BAA2B;IACzC,SAAS,EAAE,uBAAuB;IAClC,cAAc,EAAE,4BAA4B;IAC5C,oBAAoB,EAAE,kCAAkC;IACxD,iBAAiB,EAAE,gCAAgC;IACnD,UAAU,EAAE,yBAAyB;IACrC,gBAAgB,EAAE,+BAA+B;IACjD,MAAM,EAAE,qBAAqB;IAC7B,QAAQ,EAAE,uBAAuB;IACjC,mBAAmB,EAAE,iCAAiC;CACvD,CAAC"}
1
+ {"version":3,"file":"tool-metadata.js","sourceRoot":"","sources":["../src/tool-metadata.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mCAAmC,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAM9D,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,oBAAoB,EAAE,mCAAmC;IACzD,gBAAgB,EAAE,+BAA+B;IACjD,iBAAiB,EAAE,gCAAgC;IACnD,OAAO,EAAE,qBAAqB;IAC9B,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2BAA2B;IACzC,UAAU,EAAE,yBAAyB;IACrC,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,uBAAuB;IACjC,iBAAiB,EAAE,gCAAgC;IACnD,YAAY,EAAE,0BAA0B;IACxC,kBAAkB,EAAE,gCAAgC;IACpD,YAAY,EAAE,2BAA2B;IACzC,SAAS,EAAE,uBAAuB;IAClC,cAAc,EAAE,4BAA4B;IAC5C,oBAAoB,EAAE,kCAAkC;IACxD,iBAAiB,EAAE,gCAAgC;IACnD,UAAU,EAAE,yBAAyB;IACrC,gBAAgB,EAAE,+BAA+B;IACjD,MAAM,EAAE,qBAAqB;IAC7B,QAAQ,EAAE,uBAAuB;IACjC,mBAAmB,EAAE,iCAAiC;IACtD,SAAS,EAAE,wBAAwB;CACpC,CAAC"}
@@ -128,11 +128,11 @@ Most values are wrapped in single-element arrays:
128
128
  - String: {"title": ["My Widget"]}
129
129
  - Number: {"height": [800]}
130
130
  - Boolean: {"showFooter": [true]}
131
- - Complex JSON: {"config": ["{\"key\": \"value\"}"]}
131
+ - Complex JSON: {"config": ["{\\"key\\": \\"value\\"}"]}
132
132
 
133
133
  EXCEPTIONS — these types must NOT be array-wrapped:
134
134
  - LocalizedString: pass as plain map → {"localizedHeading": {"en": "Title", "de": "Titel"}}
135
- - Search definitions: pass as plain JSON string → {"search": "{\"filters\":{...}}"}
135
+ - Search definitions: pass as plain JSON string → {"search": "{\\"filters\\":{...}}"}
136
136
 
137
137
  When unsure whether a property accepts an array wrapper, call cplace_get_widget_definition to check the property type.`)
138
138
  },
@@ -155,7 +155,7 @@ Most values are wrapped in single-element arrays:
155
155
 
156
156
  EXCEPTIONS — these types must NOT be array-wrapped:
157
157
  - LocalizedString: pass as plain map → {"localizedHeading": {"en": "Title", "de": "Titel"}}
158
- - Search definitions: pass as plain JSON string → {"search": "{\"filters\":{...}}"}
158
+ - Search definitions: pass as plain JSON string → {"search": "{\\"filters\\":{...}}"}
159
159
 
160
160
  When unsure whether a property accepts an array wrapper, call cplace_get_widget_definition to check the property type.`)
161
161
  },
@@ -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 LINTING_TOOL_DEFINITIONS: {
5
+ readonly cplace_lint_script: {
6
+ readonly description: "Lint a cplace low-code script (change listener, validator, or workflow script) using the cplace ESLint rules. Returns errors and warnings. Does not modify the script. Use this to check script quality before or after saving.";
7
+ readonly inputSchema: {
8
+ readonly script: z.ZodString;
9
+ };
10
+ readonly annotations: {
11
+ readonly title: "Lint cplace Script";
12
+ };
13
+ };
14
+ };
15
+ export declare function registerLintingTools(server: McpServer, _client: CplaceApiClient): void;
16
+ //# sourceMappingURL=linting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linting.d.ts","sourceRoot":"","sources":["../../src/tools/linting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAI5C,eAAO,MAAM,wBAAwB;;;;;;;;;;CAQ3B,CAAC;AAEX,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,QAW/E"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { lintScript } from '../linter.js';
3
+ const TOOL_LINT_SCRIPT = 'cplace_lint_script';
4
+ export const LINTING_TOOL_DEFINITIONS = {
5
+ [TOOL_LINT_SCRIPT]: {
6
+ description: "Lint a cplace low-code script (change listener, validator, or workflow script) using the cplace ESLint rules. Returns errors and warnings. Does not modify the script. Use this to check script quality before or after saving.",
7
+ inputSchema: {
8
+ script: z.string().describe("The full JavaScript source code of the cplace script to lint"),
9
+ },
10
+ annotations: { title: "Lint cplace Script" },
11
+ },
12
+ };
13
+ export function registerLintingTools(server, _client) {
14
+ server.registerTool(TOOL_LINT_SCRIPT, LINTING_TOOL_DEFINITIONS[TOOL_LINT_SCRIPT], async ({ script }) => {
15
+ const result = lintScript(script);
16
+ return {
17
+ content: [{ type: "text", text: result.summary }],
18
+ };
19
+ });
20
+ }
21
+ //# sourceMappingURL=linting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linting.js","sourceRoot":"","sources":["../../src/tools/linting.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,CAAC,gBAAgB,CAAC,EAAE;QAChB,WAAW,EAAE,iOAAiO;QAC9O,WAAW,EAAE;YACT,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;SAC9F;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;KAC/C;CACK,CAAC;AAEX,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,OAAwB;IAC5E,MAAM,CAAC,YAAY,CACf,gBAAgB,EAChB,wBAAwB,CAAC,gBAAgB,CAAC,EAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;SAC7D,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -31,11 +31,11 @@ Most values are wrapped in single-element arrays:
31
31
  - String: {"title": ["My Widget"]}
32
32
  - Number: {"height": [800]}
33
33
  - Boolean: {"showFooter": [true]}
34
- - Complex JSON: {"config": ["{\"key\": \"value\"}"]}
34
+ - Complex JSON: {"config": ["{\\"key\\": \\"value\\"}"]}
35
35
 
36
36
  EXCEPTIONS — these types must NOT be array-wrapped:
37
37
  - LocalizedString: pass as plain map → {"localizedHeading": {"en": "Title", "de": "Titel"}}
38
- - Search definitions: pass as plain JSON string → {"search": "{\"filters\":{...}}"}
38
+ - Search definitions: pass as plain JSON string → {"search": "{\\"filters\\":{...}}"}
39
39
 
40
40
  When unsure whether a property accepts an array wrapper, call cplace_get_widget_definition to check the property type.`)
41
41
  },
@@ -55,11 +55,11 @@ Most values are wrapped in single-element arrays:
55
55
  - String: {"title": ["Updated Widget"]}
56
56
  - Number: {"height": [900]}
57
57
  - Boolean: {"showFooter": [true]}
58
- - Complex JSON: {"config": ["{\"key\": \"value\"}"]}
58
+ - Complex JSON: {"config": ["{\\"key\\": \\"value\\"}"]}
59
59
 
60
60
  EXCEPTIONS — these types must NOT be array-wrapped:
61
61
  - LocalizedString: pass as plain map → {"localizedHeading": {"en": "Title", "de": "Titel"}}
62
- - Search definitions: pass as plain JSON string → {"search": "{\"filters\":{...}}"}
62
+ - Search definitions: pass as plain JSON string → {"search": "{\\"filters\\":{...}}"}
63
63
 
64
64
  When unsure whether a property accepts an array wrapper, call cplace_get_widget_definition to check the property type.`)
65
65
  },
@@ -62,6 +62,7 @@ The `cf.cplace.treeTableWidget` is a concrete implementation of the platform's a
62
62
  - Create dashboard pages with hierarchical navigation
63
63
  - Provide overview pages showing entire page structures
64
64
  - Serve as entry points to complex information architectures
65
+ - Place on type layout pages where the embedding page is a concrete data instance
65
66
 
66
67
  ### When to Use This Widget:
67
68
 
@@ -385,6 +386,7 @@ src/main/resources/
385
386
  2. **Single Hierarchy**: Uses one parent attribute at a time (no multiple relationship types)
386
387
  3. **Platform Rendering**: Limited to platform's rendering capabilities (can't customize without TypeScript)
387
388
  4. **Error Handling**: Throws `TreeUnconstructableException` if embedded in a TypeDefinition page
389
+ 5. **Dashboard limitation without explicit root**: Root node resolves as: (1) connected table selection, (2) configured `rootNode`, (3) embedding page fallback. On dashboards without a configured root, the fallback uses the dashboard page — which has no hierarchy children — resulting in a single empty row. Configure an explicit `rootNode` to use on dashboards, or prefer `cf.platform.embeddedSearchAsTable` with grouping.
388
390
 
389
391
  ### Best Practices:
390
392
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  Represents a dynamically generated code block with content defined using cplaceJS. The widget displays formatted code snippets with syntax highlighting, where the code content is generated dynamically through a cplaceJS script. This widget is useful for showing code examples, configuration snippets, or any text content that benefits from code formatting, with the content determined at runtime based on page data or other dynamic criteria.
4
4
 
5
+ > **Text-only rendering**: This widget renders content as **plain text** inside `<pre><code>` using `ng-bind` (equivalent to `textContent`). It does **not** render HTML. Any HTML tags in the script return value are displayed as literal text, not rendered. For scripted HTML output (KPI cards, pivot tables, dynamic banners, formatted content), use the **Low-Code Text** widget (`cf.cplace.lowCodeWidgets.lowCodeText`) embedded inside a **Rich String** or **Text without Widget Frame** container.
6
+
5
7
  **Use when you need to:**
6
8
  - Display code examples or snippets that change based on page context
7
9
  - Show dynamically generated configuration files or scripts
@@ -10,7 +12,7 @@ Represents a dynamically generated code block with content defined using cplaceJ
10
12
 
11
13
  **Alternatives:**
12
14
  - **Rich Text Widget** - For static code blocks or when content doesn't need to be generated dynamically
13
- - **Low-Code Text Widget** - For plain text output without code formatting
15
+ - **Low-Code Text Widget** (`cf.cplace.lowCodeWidgets.lowCodeText`) - For scripted HTML output rendered inline within a rich string container
14
16
 
15
17
  ## Operating Modes
16
18
 
@@ -40,6 +42,7 @@ Use the Dynamic Code Block when:
40
42
 
41
43
  Avoid when:
42
44
  - The code content is static and doesn't change (use Rich Text instead)
45
+ - You need rendered HTML output such as KPI cards, formatted tables, or styled content (use Low-Code Text embedded in a Rich String instead)
43
46
  - You need user interaction with the code (editing, copying with click)
44
47
  - The output is better suited to table or structured display
45
48
  - Performance is critical and the script is computationally expensive
@@ -53,6 +53,7 @@ This widget can **only** be embedded inside rich string widgets. It cannot be pl
53
53
  ## Design Considerations
54
54
 
55
55
  ### When to Use This Widget
56
+ - You need scripted HTML output — this is the correct widget for rendering HTML from cplaceJS scripts (not `dynamicCodeBlockWidget`, which is text-only)
56
57
  - You need dynamic, script-computed content within a rich text layout
57
58
  - The content should update reactively based on connected table interactions
58
59
  - You want inline computed values (metrics, status text, formatted data) mixed with static rich text
@@ -19,7 +19,10 @@ Show document folder structures and content hierarchies such as chapters, sectio
19
19
  Display product hierarchies, component breakdowns, and system architectures. Navigate through technical structures and dependencies.
20
20
 
21
21
  ### Navigation and Overview Pages
22
- Create dashboard pages with hierarchical navigation, provide overview pages showing entire page structures, and serve as entry points to complex information architectures.
22
+ Provide overview pages showing entire page structures and serve as entry points to complex information architectures. Place this widget on type layout pages where the embedding page is a concrete data instance with hierarchy relationships.
23
+
24
+ ### Limitations
25
+ - **Not suitable for dashboards without explicit root node configuration**: The widget resolves its root node in priority order: (1) connected table selection, (2) explicitly configured `rootNode`, (3) embedding page fallback. On a dashboard page without a configured root node, the fallback uses the dashboard page itself as root. Since no data pages reference the dashboard page through hierarchy attributes, the tree shows only the dashboard page as a single empty row. To use this widget on a dashboard, configure an explicit `rootNode` — or prefer `cf.platform.embeddedSearchAsTable` with grouping for dashboard-based hierarchical views.
23
26
 
24
27
  ## Design Considerations
25
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cplace/mcp-server",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
4
  "description": "MCP server that provides Claude Desktop with tools to interact with cplace APIs",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,7 +15,7 @@
15
15
  "start:dev": "node dist/index.js --remote",
16
16
  "test": "vitest",
17
17
  "clean": "rm -rf dist",
18
- "lint": "eslint src --ext .ts",
18
+ "lint": "eslint src/**/*.ts",
19
19
  "format": "prettier --write src/**/*.ts",
20
20
  "prepare": "npm run clean && npm run build"
21
21
  },
@@ -46,11 +46,13 @@
46
46
  "node": ">=18.0.0"
47
47
  },
48
48
  "dependencies": {
49
+ "@eslint/js": "^9.28.0",
49
50
  "@modelcontextprotocol/sdk": "^1.17.4",
50
51
  "axios": "^1.6.0",
51
52
  "cors": "^2.8.5",
52
53
  "dot-prop": "^8.0.2",
53
54
  "dotenv": "^16.3.0",
55
+ "eslint": "^9.28.0",
54
56
  "express": "^5.1.0",
55
57
  "semver": "^7.6.0",
56
58
  "zod": "^3.25.67"
@@ -59,12 +61,11 @@
59
61
  "@types/cors": "^2.8.19",
60
62
  "@types/express": "^5.0.3",
61
63
  "@types/node": "^20.0.0",
62
- "@typescript-eslint/eslint-plugin": "^6.0.0",
63
- "@typescript-eslint/parser": "^6.0.0",
64
- "eslint": "^8.0.0",
64
+ "@types/semver": "^7.5.0",
65
65
  "prettier": "^3.0.0",
66
66
  "tsx": "^4.0.0",
67
67
  "typescript": "^5.5.0",
68
+ "typescript-eslint": "^8.33.1",
68
69
  "vitest": "^1.0.0"
69
70
  }
70
71
  }