@bimatrix-aud-platform/aud_mcp_server 1.1.56 → 1.1.63

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/dist/index.js CHANGED
@@ -13,6 +13,7 @@ import { generateDataSource } from "./generators/datasource.js";
13
13
  import { fixMtsd } from "./generators/fixer.js";
14
14
  import { getControlInfo } from "./generators/control-info.js";
15
15
  import { generateOlapFields } from "./generators/olap-field.js";
16
+ import { compactElement, compactGridColumn, compactDataSource, compactOlapField } from "./generators/compact.js";
16
17
  import { executeMtsdScript } from "./generators/mtsd-builder.js";
17
18
  import { generateId } from "./utils/uuid.js";
18
19
  import { callSchemaService, callDbmsList, callBoxStyleService, callBoxStyleSaveService, callSaveReportService, callReadReportService, downloadReportResources, getAudConfig, isAudConfigured, setWorkspaceRoots, callModuleService } from "./utils/aud-api-client.js";
@@ -60,6 +61,16 @@ catch (error) {
60
61
  console.error("Failed to load ds schema:", error);
61
62
  process.exit(1);
62
63
  }
64
+ // Load Design (compact) schema
65
+ const designSchemaPath = join(__dirname, "..", "schemas", "design.schema.json");
66
+ let designSchema;
67
+ try {
68
+ designSchema = JSON.parse(readFileSync(designSchemaPath, "utf-8"));
69
+ }
70
+ catch (error) {
71
+ console.error("Failed to load design schema:", error);
72
+ process.exit(1);
73
+ }
63
74
  // Initialize AJV validator
64
75
  const ajv = new Ajv.default({
65
76
  allErrors: true,
@@ -68,6 +79,7 @@ const ajv = new Ajv.default({
68
79
  });
69
80
  addFormats.default(ajv);
70
81
  const validate = ajv.compile(mtsdSchema);
82
+ const validateDesign = ajv.compile(designSchema);
71
83
  const validateModule = ajv.compile(moduleSchema);
72
84
  const validateJson2 = ajv.compile(json2Schema);
73
85
  const validateDs = ajv.compile(dsSchema);
@@ -108,13 +120,19 @@ function groupErrors(errors) {
108
120
  return grouped;
109
121
  }
110
122
  // Get schema definition by reference
111
- function getSchemaDefinition(defName) {
112
- const defs = mtsdSchema.$defs;
123
+ // format: "mtsd" (full) or "design" (compact, relaxed required)
124
+ function getSchemaDefinition(defName, format = "mtsd") {
125
+ const schema = format === "design" ? designSchema : mtsdSchema;
126
+ const defs = schema.$defs;
113
127
  if (defs && defs[defName]) {
114
128
  return defs[defName];
115
129
  }
116
130
  return null;
117
131
  }
132
+ // Get the appropriate schema object by format
133
+ function getSchemaByFormat(format) {
134
+ return format === "design" ? designSchema : mtsdSchema;
135
+ }
118
136
  // Extract required and optional properties from schema definition
119
137
  function extractProperties(defName) {
120
138
  const def = getSchemaDefinition(defName);
@@ -142,7 +160,7 @@ function extractProperties(defName) {
142
160
  const tools = [
143
161
  {
144
162
  name: "validate_mtsd",
145
- description: "MTSD 문서 전체를 검증합니다. JSON 문자열 또는 객체를 받아 스키마 준수 여부를 확인하고, 오류가 있으면 상세한 한국어 오류 메시지를 반환합니다.",
163
+ description: "MTSD 또는 .design.json 문서 전체를 검증합니다. JSON 문자열 또는 객체를 받아 스키마 준수 여부를 확인하고, 오류가 있으면 상세한 한국어 오류 메시지를 반환합니다. format='design'이면 간소화된 .design.json 스키마(기본값 생략 허용)로 검증합니다.",
146
164
  inputSchema: {
147
165
  type: "object",
148
166
  properties: {
@@ -150,13 +168,19 @@ const tools = [
150
168
  type: ["string", "object"],
151
169
  description: "검증할 MTSD 문서 (JSON 문자열 또는 객체)",
152
170
  },
171
+ format: {
172
+ type: "string",
173
+ enum: ["mtsd", "design"],
174
+ description: "검증 스키마 형식. 'mtsd'(기본값): 전체 MTSD 스키마, 'design': 간소화된 .design.json 스키마 (기본값 생략 허용)",
175
+ default: "mtsd",
176
+ },
153
177
  },
154
178
  required: ["document"],
155
179
  },
156
180
  },
157
181
  {
158
182
  name: "validate_part",
159
- description: "MTSD 문서의 특정 부분만 검증합니다. 예: Forms, DataSources, Elements 등. 점진적 문서 생성 유용합니다.",
183
+ description: "MTSD 또는 .design.json 문서의 특정 부분만 검증합니다. 예: Forms, DataSources, Elements 등. format='design'이면 간소화된 스키마(기본값 생략 허용)로 검증합니다.",
160
184
  inputSchema: {
161
185
  type: "object",
162
186
  properties: {
@@ -213,6 +237,12 @@ const tools = [
213
237
  type: ["string", "object"],
214
238
  description: "검증할 데이터 (JSON 문자열 또는 객체)",
215
239
  },
240
+ format: {
241
+ type: "string",
242
+ enum: ["mtsd", "design"],
243
+ description: "검증 스키마 형식. 'mtsd'(기본값): 전체 MTSD 스키마, 'design': 간소화된 .design.json 스키마 (기본값 생략 허용)",
244
+ default: "mtsd",
245
+ },
216
246
  },
217
247
  required: ["partName", "data"],
218
248
  },
@@ -386,6 +416,11 @@ const tools = [
386
416
  type: "boolean",
387
417
  description: "표시 여부 (기본값: true)",
388
418
  },
419
+ compact: {
420
+ type: "boolean",
421
+ description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
422
+ default: false,
423
+ },
389
424
  },
390
425
  required: ["type"],
391
426
  additionalProperties: true,
@@ -445,6 +480,11 @@ const tools = [
445
480
  },
446
481
  description: "생성할 컬럼 목록",
447
482
  },
483
+ compact: {
484
+ type: "boolean",
485
+ description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
486
+ default: false,
487
+ },
448
488
  },
449
489
  required: ["columns"],
450
490
  },
@@ -494,6 +534,11 @@ const tools = [
494
534
  useMeta: { type: "boolean" },
495
535
  useCache: { type: "boolean" },
496
536
  encrypted: { type: "boolean" },
537
+ compact: {
538
+ type: "boolean",
539
+ description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
540
+ default: false,
541
+ },
497
542
  },
498
543
  required: ["name", "connection"],
499
544
  additionalProperties: true,
@@ -543,6 +588,11 @@ const tools = [
543
588
  type: "boolean",
544
589
  description: "iOLAPView 전체 구조(Options + Fields) 포함 여부 (기본: false)",
545
590
  },
591
+ compact: {
592
+ type: "boolean",
593
+ description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
594
+ default: false,
595
+ },
546
596
  },
547
597
  required: ["columns"],
548
598
  },
@@ -951,6 +1001,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
951
1001
  switch (name) {
952
1002
  case "validate_mtsd": {
953
1003
  let document = args?.document;
1004
+ const format = args?.format || "mtsd";
954
1005
  if (typeof document === "string") {
955
1006
  try {
956
1007
  document = JSON.parse(document);
@@ -969,7 +1020,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
969
1020
  };
970
1021
  }
971
1022
  }
972
- const valid = validate(document);
1023
+ const validator = format === "design" ? validateDesign : validate;
1024
+ const valid = validator(document);
1025
+ const formatLabel = format === "design" ? "Design" : "MTSD";
973
1026
  if (valid) {
974
1027
  return {
975
1028
  content: [
@@ -977,14 +1030,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
977
1030
  type: "text",
978
1031
  text: JSON.stringify({
979
1032
  valid: true,
980
- message: "MTSD 문서가 스키마를 준수합니다.",
1033
+ message: `${formatLabel} 문서가 스키마를 준수합니다.`,
981
1034
  }),
982
1035
  },
983
1036
  ],
984
1037
  };
985
1038
  }
986
1039
  else {
987
- const errors = validate.errors || [];
1040
+ const errors = validator.errors || [];
988
1041
  const groupedErrors = groupErrors(errors);
989
1042
  const errorCount = errors.length;
990
1043
  return {
@@ -1005,6 +1058,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1005
1058
  }
1006
1059
  case "validate_part": {
1007
1060
  const partName = args?.partName;
1061
+ const partFormat = args?.format || "mtsd";
1008
1062
  let data = args?.data;
1009
1063
  if (typeof data === "string") {
1010
1064
  try {
@@ -1024,7 +1078,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1024
1078
  };
1025
1079
  }
1026
1080
  }
1027
- const partSchema = getSchemaDefinition(partName);
1081
+ const partSchema = getSchemaDefinition(partName, partFormat);
1028
1082
  if (!partSchema) {
1029
1083
  return {
1030
1084
  content: [
@@ -1038,7 +1092,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1038
1092
  ],
1039
1093
  };
1040
1094
  }
1041
- const partSchemaWithDefs = { ...partSchema, $defs: mtsdSchema.$defs };
1095
+ const selectedSchema = getSchemaByFormat(partFormat);
1096
+ const partSchemaWithDefs = { ...partSchema, $defs: selectedSchema.$defs };
1042
1097
  const partValidate = ajv.compile(partSchemaWithDefs);
1043
1098
  const valid = partValidate(data);
1044
1099
  if (valid) {
@@ -1182,13 +1237,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1182
1237
  }
1183
1238
  case "generate_element": {
1184
1239
  const result = generateElement(args);
1240
+ const isCompact = args?.compact === true;
1241
+ const elementOut = isCompact ? compactElement(result.element) : result.element;
1185
1242
  return {
1186
1243
  content: [
1187
1244
  {
1188
1245
  type: "text",
1189
1246
  text: JSON.stringify({
1190
1247
  success: true,
1191
- element: result.element,
1248
+ element: elementOut,
1249
+ compact: isCompact || undefined,
1192
1250
  warnings: result.warnings.length > 0
1193
1251
  ? result.warnings
1194
1252
  : undefined,
@@ -1199,14 +1257,17 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1199
1257
  }
1200
1258
  case "generate_grid_column": {
1201
1259
  const result = generateGridColumns(args);
1260
+ const gcCompact = args?.compact === true;
1261
+ const columnsOut = gcCompact ? result.columns.map(compactGridColumn) : result.columns;
1202
1262
  return {
1203
1263
  content: [
1204
1264
  {
1205
1265
  type: "text",
1206
1266
  text: JSON.stringify({
1207
1267
  success: true,
1208
- columns: result.columns,
1209
- count: result.columns.length,
1268
+ columns: columnsOut,
1269
+ count: columnsOut.length,
1270
+ compact: gcCompact || undefined,
1210
1271
  warnings: result.warnings.length > 0
1211
1272
  ? result.warnings
1212
1273
  : undefined,
@@ -1217,13 +1278,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1217
1278
  }
1218
1279
  case "generate_datasource": {
1219
1280
  const result = generateDataSource(args);
1281
+ const dsCompact = args?.compact === true;
1282
+ const dsOut = dsCompact ? compactDataSource(result.dataSource) : result.dataSource;
1220
1283
  return {
1221
1284
  content: [
1222
1285
  {
1223
1286
  type: "text",
1224
1287
  text: JSON.stringify({
1225
1288
  success: true,
1226
- dataSource: result.dataSource,
1289
+ dataSource: dsOut,
1290
+ compact: dsCompact || undefined,
1227
1291
  warnings: result.warnings.length > 0
1228
1292
  ? result.warnings
1229
1293
  : undefined,
@@ -1234,15 +1298,18 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1234
1298
  }
1235
1299
  case "generate_olap_fields": {
1236
1300
  const result = generateOlapFields(args);
1301
+ const ofCompact = args?.compact === true;
1302
+ const fieldsOut = ofCompact ? result.fields.map(compactOlapField) : result.fields;
1237
1303
  return {
1238
1304
  content: [
1239
1305
  {
1240
1306
  type: "text",
1241
1307
  text: JSON.stringify({
1242
1308
  success: true,
1243
- fields: result.fields,
1309
+ fields: fieldsOut,
1244
1310
  iOLAPView: result.iOLAPView,
1245
1311
  summary: result.summary,
1312
+ compact: ofCompact || undefined,
1246
1313
  warnings: result.warnings.length > 0
1247
1314
  ? result.warnings
1248
1315
  : undefined,