@igniteui/angular-schematics 20.1.1471 → 20.1.1500-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/src/collection.json +6 -0
- package/src/mcp/cli.d.ts +3 -0
- package/src/mcp/cli.js +53 -0
- package/src/mcp/index.d.ts +2 -0
- package/src/mcp/index.js +7 -0
- package/src/mcp/mcp-server.d.ts +6 -0
- package/src/mcp/mcp-server.js +327 -0
- package/src/mcp-schematic/index.d.ts +2 -0
- package/src/mcp-schematic/index.js +21 -0
- package/src/mcp-schematic/schema.json +13 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igniteui/angular-schematics",
|
|
3
|
-
"version": "20.1.
|
|
3
|
+
"version": "20.1.1500-alpha.0",
|
|
4
4
|
"description": "Ignite UI for Angular Schematics for ng new and ng generate",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@angular-devkit/core": "^19.0.0",
|
|
24
24
|
"@angular-devkit/schematics": "^19.0.0",
|
|
25
|
-
"@igniteui/angular-templates": "~20.1.
|
|
26
|
-
"@igniteui/cli-core": "~
|
|
25
|
+
"@igniteui/angular-templates": "~20.1.1500-alpha.0",
|
|
26
|
+
"@igniteui/cli-core": "~15.0.0-alpha.0",
|
|
27
|
+
"@modelcontextprotocol/sdk": "^1.21.0",
|
|
27
28
|
"@schematics/angular": "~19.0.0",
|
|
28
29
|
"minimatch": "^10.0.1",
|
|
29
30
|
"rxjs": "^7.8.1"
|
package/src/collection.json
CHANGED
|
@@ -37,6 +37,12 @@
|
|
|
37
37
|
"description": "Upgrades to the licensed Ignite UI for Angular packages",
|
|
38
38
|
"factory": "./upgrade-packages/index",
|
|
39
39
|
"schema": "./upgrade-packages/schema.json"
|
|
40
|
+
},
|
|
41
|
+
"mcp": {
|
|
42
|
+
"description": "Start the Ignite UI for Angular MCP (Model Context Protocol) server",
|
|
43
|
+
"factory": "./mcp-schematic/index#mcp",
|
|
44
|
+
"schema": "./mcp-schematic/schema.json",
|
|
45
|
+
"hidden": true
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
48
|
}
|
package/src/mcp/cli.d.ts
ADDED
package/src/mcp/cli.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.runMcpServer = runMcpServer;
|
|
13
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
14
|
+
const mcp_server_1 = require("./mcp-server");
|
|
15
|
+
const INTERACTIVE_MESSAGE = `
|
|
16
|
+
To start using the Ignite UI for Angular Schematics MCP Server, add this configuration to your host:
|
|
17
|
+
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"igniteui-angular-schematics": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["-y", "@igniteui/angular-schematics-mcp"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Exact configuration may differ depending on the host.
|
|
28
|
+
|
|
29
|
+
For more information, visit: https://www.infragistics.com/products/ignite-ui-angular/angular/components/general/cli/getting-started-with-angular-schematics
|
|
30
|
+
`;
|
|
31
|
+
function isTTY() {
|
|
32
|
+
return Boolean(process.stdout.isTTY);
|
|
33
|
+
}
|
|
34
|
+
function runMcpServer(options) {
|
|
35
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
if (isTTY()) {
|
|
37
|
+
console.log(INTERACTIVE_MESSAGE);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const server = yield (0, mcp_server_1.createMcpServer)({
|
|
41
|
+
readOnly: options.readOnly,
|
|
42
|
+
});
|
|
43
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
44
|
+
yield server.connect(transport);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// If this file is run directly
|
|
48
|
+
if (require.main === module) {
|
|
49
|
+
runMcpServer({ readOnly: false }).catch((error) => {
|
|
50
|
+
console.error("Error running MCP server:", error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
});
|
|
53
|
+
}
|
package/src/mcp/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runMcpServer = exports.createMcpServer = void 0;
|
|
4
|
+
var mcp_server_1 = require("./mcp-server");
|
|
5
|
+
Object.defineProperty(exports, "createMcpServer", { enumerable: true, get: function () { return mcp_server_1.createMcpServer; } });
|
|
6
|
+
var cli_1 = require("./cli");
|
|
7
|
+
Object.defineProperty(exports, "runMcpServer", { enumerable: true, get: function () { return cli_1.runMcpServer; } });
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createMcpServer = createMcpServer;
|
|
13
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
14
|
+
const SchematicsTemplateManager_1 = require("../SchematicsTemplateManager");
|
|
15
|
+
function createMcpServer(options) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const packageJson = require("../../package.json");
|
|
18
|
+
const server = new mcp_js_1.McpServer({
|
|
19
|
+
name: "igniteui-ng-schematics-server",
|
|
20
|
+
version: packageJson.version,
|
|
21
|
+
}, {
|
|
22
|
+
capabilities: {
|
|
23
|
+
tools: {},
|
|
24
|
+
resources: {},
|
|
25
|
+
prompts: {},
|
|
26
|
+
},
|
|
27
|
+
instructions: `
|
|
28
|
+
<General Purpose>
|
|
29
|
+
This server provides a safe, programmatic interface to the Ignite UI for Angular Schematics for an AI assistant.
|
|
30
|
+
Your primary goal is to use these tools to create and modify Angular projects with Ignite UI components.
|
|
31
|
+
You MUST prefer the tools provided by this server over using shell commands for equivalent actions.
|
|
32
|
+
</General Purpose>
|
|
33
|
+
|
|
34
|
+
<Core Workflows & Tool Guide>
|
|
35
|
+
* **1. Create a New Angular Project:** Use the \`ng_new_igniteui\` tool to create a new Angular project with Ignite UI for Angular.
|
|
36
|
+
|
|
37
|
+
* **2. Add Components:** Use the \`ng_add_component\` tool to add Ignite UI for Angular components to an existing project.
|
|
38
|
+
|
|
39
|
+
* **3. List Available Components:** Use the \`ng_list_components\` tool to see available Ignite UI for Angular components.
|
|
40
|
+
|
|
41
|
+
* **4. Upgrade Packages:** Use the \`ng_upgrade_packages\` tool to upgrade to the licensed Ignite UI for Angular packages.
|
|
42
|
+
</Core Workflows & Tool Guide>
|
|
43
|
+
|
|
44
|
+
<Key Concepts>
|
|
45
|
+
* **Component:** Pre-built Ignite UI for Angular components that can be added to a project
|
|
46
|
+
* **Module:** The Angular module where the component will be registered
|
|
47
|
+
* **Route:** Automatically generated navigation route for new components
|
|
48
|
+
</Key Concepts>
|
|
49
|
+
`,
|
|
50
|
+
});
|
|
51
|
+
// Register tools
|
|
52
|
+
server.tool("ng_new_igniteui", "Create a new Angular project with Ignite UI for Angular", {
|
|
53
|
+
name: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "Project name (required)",
|
|
56
|
+
},
|
|
57
|
+
template: {
|
|
58
|
+
type: "string",
|
|
59
|
+
description: "Project template (e.g., side-nav, side-nav-auth)",
|
|
60
|
+
},
|
|
61
|
+
theme: {
|
|
62
|
+
type: "string",
|
|
63
|
+
description: "Theme name for the project",
|
|
64
|
+
},
|
|
65
|
+
skipGit: {
|
|
66
|
+
type: "boolean",
|
|
67
|
+
description: "Skip initializing a Git repository",
|
|
68
|
+
},
|
|
69
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
try {
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: "text",
|
|
75
|
+
text: `To create a new Ignite UI for Angular project, use: ng new ${args.name} --collection=@igniteui/angular-schematics`,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
content: [
|
|
83
|
+
{
|
|
84
|
+
type: "text",
|
|
85
|
+
text: `Error creating project: ${error.message}`,
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
isError: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
server.tool("ng_add_component", "Add an Ignite UI for Angular component to the current project", {
|
|
93
|
+
template: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: 'Component template ID (e.g., "grid", "combo", "chart")',
|
|
96
|
+
},
|
|
97
|
+
name: {
|
|
98
|
+
type: "string",
|
|
99
|
+
description: "Component name",
|
|
100
|
+
},
|
|
101
|
+
module: {
|
|
102
|
+
type: "string",
|
|
103
|
+
description: "Module to add the component to",
|
|
104
|
+
},
|
|
105
|
+
skipRoute: {
|
|
106
|
+
type: "boolean",
|
|
107
|
+
description: "Skip adding a route for this component",
|
|
108
|
+
},
|
|
109
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
try {
|
|
111
|
+
const templateManager = new SchematicsTemplateManager_1.SchematicsTemplateManager();
|
|
112
|
+
const projLib = templateManager.getProjectLibrary("angular", "igx-ts");
|
|
113
|
+
if (!projLib.hasTemplate(args.template)) {
|
|
114
|
+
return {
|
|
115
|
+
content: [
|
|
116
|
+
{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: `Component template "${args.template}" not found. Use ng_list_components to see available templates.`,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
isError: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const commandParts = [`ng generate @igniteui/angular-schematics:component`];
|
|
125
|
+
commandParts.push(`--template=${args.template}`);
|
|
126
|
+
if (args.name) {
|
|
127
|
+
commandParts.push(`--name=${args.name}`);
|
|
128
|
+
}
|
|
129
|
+
if (args.module) {
|
|
130
|
+
commandParts.push(`--module=${args.module}`);
|
|
131
|
+
}
|
|
132
|
+
if (args.skipRoute) {
|
|
133
|
+
commandParts.push(`--skip-route`);
|
|
134
|
+
}
|
|
135
|
+
const command = commandParts.join(' ');
|
|
136
|
+
return {
|
|
137
|
+
content: [
|
|
138
|
+
{
|
|
139
|
+
type: "text",
|
|
140
|
+
text: `To add the component, run: ${command}`,
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return {
|
|
147
|
+
content: [
|
|
148
|
+
{
|
|
149
|
+
type: "text",
|
|
150
|
+
text: `Error adding component: ${error.message}`,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
isError: true,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}));
|
|
157
|
+
server.tool("ng_list_components", "List available Ignite UI for Angular components", {}, () => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
try {
|
|
159
|
+
const templateManager = new SchematicsTemplateManager_1.SchematicsTemplateManager();
|
|
160
|
+
const projLib = templateManager.getProjectLibrary("angular", "igx-ts");
|
|
161
|
+
const components = projLib.components.map((c) => ({
|
|
162
|
+
id: c.id,
|
|
163
|
+
name: c.name,
|
|
164
|
+
description: c.description,
|
|
165
|
+
group: c.group,
|
|
166
|
+
}));
|
|
167
|
+
return {
|
|
168
|
+
content: [
|
|
169
|
+
{
|
|
170
|
+
type: "text",
|
|
171
|
+
text: JSON.stringify({ components }, null, 2),
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return {
|
|
178
|
+
content: [
|
|
179
|
+
{
|
|
180
|
+
type: "text",
|
|
181
|
+
text: `Error listing components: ${error.message}`,
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
isError: true,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
server.tool("ng_upgrade_packages", "Upgrade to the licensed Ignite UI for Angular packages", {}, () => __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
try {
|
|
190
|
+
return {
|
|
191
|
+
content: [
|
|
192
|
+
{
|
|
193
|
+
type: "text",
|
|
194
|
+
text: "To upgrade packages, run: ng generate @igniteui/angular-schematics:upgrade-packages",
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return {
|
|
201
|
+
content: [
|
|
202
|
+
{
|
|
203
|
+
type: "text",
|
|
204
|
+
text: `Error upgrading packages: ${error.message}`,
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
isError: true,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}));
|
|
211
|
+
// Enhanced tool with table formatting for component listing
|
|
212
|
+
server.tool("ng_list_components_with_commands", "List all available Ignite UI for Angular components with their corresponding CLI and schematic commands in table format", {
|
|
213
|
+
format: {
|
|
214
|
+
type: "string",
|
|
215
|
+
description: "Output format: 'table' (default) or 'json'",
|
|
216
|
+
},
|
|
217
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
218
|
+
try {
|
|
219
|
+
const format = args.format || "table";
|
|
220
|
+
const templateManager = new SchematicsTemplateManager_1.SchematicsTemplateManager();
|
|
221
|
+
const projLib = templateManager.getProjectLibrary("angular", "igx-ts");
|
|
222
|
+
const components = [];
|
|
223
|
+
for (const component of projLib.components) {
|
|
224
|
+
// Get first template for the component to extract ID
|
|
225
|
+
const firstTemplate = component.templates[0];
|
|
226
|
+
if (firstTemplate) {
|
|
227
|
+
const componentId = firstTemplate.id;
|
|
228
|
+
const cliCommand = `ig add ${componentId} new${component.name.replace(/\s/g, "")}`;
|
|
229
|
+
const schematicCommand = `ng g @igniteui/angular-schematics:component ${componentId} new${component.name.replace(/\s/g, "")}`;
|
|
230
|
+
components.push({
|
|
231
|
+
id: componentId,
|
|
232
|
+
name: component.name,
|
|
233
|
+
description: component.description || "",
|
|
234
|
+
cliCommand,
|
|
235
|
+
schematicCommand,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (format === "table") {
|
|
240
|
+
// Create formatted table
|
|
241
|
+
let table = `
|
|
242
|
+
Available Ignite UI for Angular Components:
|
|
243
|
+
|
|
244
|
+
| Component | Description | CLI Command | Schematic Command |
|
|
245
|
+
|-----------------|--------------------------------|--------------------------------|------------------------------------------------------------------|
|
|
246
|
+
`;
|
|
247
|
+
for (const comp of components) {
|
|
248
|
+
const id = comp.id.padEnd(15);
|
|
249
|
+
const desc = (comp.description.substring(0, 30)).padEnd(30);
|
|
250
|
+
const cli = comp.cliCommand.padEnd(30);
|
|
251
|
+
const schematic = comp.schematicCommand.padEnd(64);
|
|
252
|
+
table += `| ${id} | ${desc} | ${cli} | ${schematic} |\n`;
|
|
253
|
+
}
|
|
254
|
+
table += `
|
|
255
|
+
\nTo add a component, use either command from the table above.
|
|
256
|
+
|
|
257
|
+
Example for adding a grid component:
|
|
258
|
+
ng g @igniteui/angular-schematics:component grid myGrid
|
|
259
|
+
|
|
260
|
+
Or using Ignite UI CLI:
|
|
261
|
+
ig add grid myGrid
|
|
262
|
+
|
|
263
|
+
After adding a component, start your application with:
|
|
264
|
+
ng serve
|
|
265
|
+
`;
|
|
266
|
+
return {
|
|
267
|
+
content: [
|
|
268
|
+
{
|
|
269
|
+
type: "text",
|
|
270
|
+
text: table,
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
// Return JSON format
|
|
277
|
+
return {
|
|
278
|
+
content: [
|
|
279
|
+
{
|
|
280
|
+
type: "text",
|
|
281
|
+
text: JSON.stringify({ framework: "angular", components }, null, 2),
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
return {
|
|
289
|
+
content: [
|
|
290
|
+
{
|
|
291
|
+
type: "text",
|
|
292
|
+
text: `Error listing components: ${error.message}`,
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
isError: true,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}));
|
|
299
|
+
// Tool to get Angular workspace information
|
|
300
|
+
server.tool("ng_get_workspace_info", "Get Angular workspace configuration and project information", {}, () => __awaiter(this, void 0, void 0, function* () {
|
|
301
|
+
try {
|
|
302
|
+
// This would read angular.json in a real implementation
|
|
303
|
+
// For now, provide guidance
|
|
304
|
+
return {
|
|
305
|
+
content: [
|
|
306
|
+
{
|
|
307
|
+
type: "text",
|
|
308
|
+
text: "To get workspace info, read the angular.json file in your project root. This tool provides Angular workspace configuration including projects, build configurations, and paths.",
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: "text",
|
|
318
|
+
text: `Error getting workspace info: ${error.message}`,
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
isError: true,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}));
|
|
325
|
+
return server;
|
|
326
|
+
});
|
|
327
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.mcp = mcp;
|
|
13
|
+
const cli_1 = require("../mcp/cli");
|
|
14
|
+
function mcp(_options) {
|
|
15
|
+
return (_tree, _context) => __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
// This schematic is primarily meant to be invoked via CLI
|
|
17
|
+
// The actual MCP server logic is in the cli.ts file
|
|
18
|
+
yield (0, cli_1.runMcpServer)({ readOnly: _options.readOnly || false });
|
|
19
|
+
return _tree;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"id": "IgniteUIAngularMcpSchematic",
|
|
4
|
+
"title": "Ignite UI for Angular MCP Server Schema",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"readOnly": {
|
|
8
|
+
"type": "boolean",
|
|
9
|
+
"default": false,
|
|
10
|
+
"description": "Only register read-only tools."
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|