jui-tools-mcp-server 2.5.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 (172) hide show
  1. package/.github/workflows/test.yml +35 -0
  2. package/README.md +148 -0
  3. package/data/attribute_definitions.json +4248 -0
  4. package/data/attribute_semantics.json +137 -0
  5. package/data/binding_semantics.json +115 -0
  6. package/data/component_metadata.json +769 -0
  7. package/data/coverage.json +114 -0
  8. package/data/screen_identity.json +350 -0
  9. package/dist/cli_runner.d.ts +10 -0
  10. package/dist/cli_runner.js +33 -0
  11. package/dist/config.d.ts +19 -0
  12. package/dist/config.js +67 -0
  13. package/dist/data/component_metadata.d.ts +30 -0
  14. package/dist/data/component_metadata.js +498 -0
  15. package/dist/data/derived.d.ts +198 -0
  16. package/dist/data/derived.js +293 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +130 -0
  19. package/dist/spec_loader.d.ts +110 -0
  20. package/dist/spec_loader.js +445 -0
  21. package/dist/tools/api/list_api_models.d.ts +10 -0
  22. package/dist/tools/api/list_api_models.js +37 -0
  23. package/dist/tools/api/list_api_specs.d.ts +19 -0
  24. package/dist/tools/api/list_api_specs.js +42 -0
  25. package/dist/tools/api/preview_api_model_sync.d.ts +11 -0
  26. package/dist/tools/api/preview_api_model_sync.js +34 -0
  27. package/dist/tools/context/get_project_config.d.ts +3 -0
  28. package/dist/tools/context/get_project_config.js +20 -0
  29. package/dist/tools/context/list_component_specs.d.ts +3 -0
  30. package/dist/tools/context/list_component_specs.js +35 -0
  31. package/dist/tools/context/list_layouts.d.ts +3 -0
  32. package/dist/tools/context/list_layouts.js +118 -0
  33. package/dist/tools/context/list_screen_specs.d.ts +3 -0
  34. package/dist/tools/context/list_screen_specs.js +37 -0
  35. package/dist/tools/context/read_layout_file.d.ts +3 -0
  36. package/dist/tools/context/read_layout_file.js +25 -0
  37. package/dist/tools/context/read_spec_file.d.ts +3 -0
  38. package/dist/tools/context/read_spec_file.js +27 -0
  39. package/dist/tools/doc/doc_generate_component.d.ts +3 -0
  40. package/dist/tools/doc/doc_generate_component.js +38 -0
  41. package/dist/tools/doc/doc_generate_html.d.ts +3 -0
  42. package/dist/tools/doc/doc_generate_html.js +46 -0
  43. package/dist/tools/doc/doc_generate_spec.d.ts +3 -0
  44. package/dist/tools/doc/doc_generate_spec.js +38 -0
  45. package/dist/tools/doc/doc_init_component.d.ts +3 -0
  46. package/dist/tools/doc/doc_init_component.js +30 -0
  47. package/dist/tools/doc/doc_init_spec.d.ts +3 -0
  48. package/dist/tools/doc/doc_init_spec.js +33 -0
  49. package/dist/tools/doc/doc_rules_init.d.ts +3 -0
  50. package/dist/tools/doc/doc_rules_init.js +25 -0
  51. package/dist/tools/doc/doc_rules_show.d.ts +3 -0
  52. package/dist/tools/doc/doc_rules_show.js +21 -0
  53. package/dist/tools/doc/doc_validate_component.d.ts +3 -0
  54. package/dist/tools/doc/doc_validate_component.js +39 -0
  55. package/dist/tools/doc/doc_validate_spec.d.ts +3 -0
  56. package/dist/tools/doc/doc_validate_spec.js +40 -0
  57. package/dist/tools/jui/jui_build.d.ts +3 -0
  58. package/dist/tools/jui/jui_build.js +31 -0
  59. package/dist/tools/jui/jui_generate_converter.d.ts +3 -0
  60. package/dist/tools/jui/jui_generate_converter.js +43 -0
  61. package/dist/tools/jui/jui_generate_project.d.ts +3 -0
  62. package/dist/tools/jui/jui_generate_project.js +43 -0
  63. package/dist/tools/jui/jui_generate_screen.d.ts +3 -0
  64. package/dist/tools/jui/jui_generate_screen.js +22 -0
  65. package/dist/tools/jui/jui_init.d.ts +3 -0
  66. package/dist/tools/jui/jui_init.js +42 -0
  67. package/dist/tools/jui/jui_migrate_layouts.d.ts +3 -0
  68. package/dist/tools/jui/jui_migrate_layouts.js +25 -0
  69. package/dist/tools/jui/jui_sync_tool.d.ts +3 -0
  70. package/dist/tools/jui/jui_sync_tool.js +33 -0
  71. package/dist/tools/jui/jui_verify.d.ts +3 -0
  72. package/dist/tools/jui/jui_verify.js +43 -0
  73. package/dist/tools/spec/get_binding_rules.d.ts +3 -0
  74. package/dist/tools/spec/get_binding_rules.js +8 -0
  75. package/dist/tools/spec/get_data_source.d.ts +3 -0
  76. package/dist/tools/spec/get_data_source.js +41 -0
  77. package/dist/tools/spec/get_modifier_order.d.ts +3 -0
  78. package/dist/tools/spec/get_modifier_order.js +14 -0
  79. package/dist/tools/spec/get_platform_mapping.d.ts +3 -0
  80. package/dist/tools/spec/get_platform_mapping.js +20 -0
  81. package/dist/tools/spec/get_screen_identity.d.ts +3 -0
  82. package/dist/tools/spec/get_screen_identity.js +22 -0
  83. package/dist/tools/spec/lookup_attribute.d.ts +3 -0
  84. package/dist/tools/spec/lookup_attribute.js +14 -0
  85. package/dist/tools/spec/lookup_component.d.ts +3 -0
  86. package/dist/tools/spec/lookup_component.js +15 -0
  87. package/dist/tools/spec/search_components.d.ts +3 -0
  88. package/dist/tools/spec/search_components.js +14 -0
  89. package/dist/tools/test/test_artifacts_pull.d.ts +3 -0
  90. package/dist/tools/test/test_artifacts_pull.js +48 -0
  91. package/dist/tools/test/test_artifacts_status.d.ts +3 -0
  92. package/dist/tools/test/test_artifacts_status.js +28 -0
  93. package/dist/tools/test/test_generate_description.d.ts +3 -0
  94. package/dist/tools/test/test_generate_description.js +27 -0
  95. package/dist/tools/test/test_generate_flow.d.ts +3 -0
  96. package/dist/tools/test/test_generate_flow.js +29 -0
  97. package/dist/tools/test/test_generate_screen.d.ts +3 -0
  98. package/dist/tools/test/test_generate_screen.js +29 -0
  99. package/dist/tools/test/test_mock_generate.d.ts +3 -0
  100. package/dist/tools/test/test_mock_generate.js +64 -0
  101. package/dist/tools/test/test_report.d.ts +3 -0
  102. package/dist/tools/test/test_report.js +26 -0
  103. package/dist/tools/test/test_validate.d.ts +3 -0
  104. package/dist/tools/test/test_validate.js +43 -0
  105. package/docs/design.md +227 -0
  106. package/install.sh +90 -0
  107. package/package.json +24 -0
  108. package/scripts/fetch-definitions.js +101 -0
  109. package/scripts/fetch-manifest.js +60 -0
  110. package/src/cli_runner.ts +55 -0
  111. package/src/config.ts +88 -0
  112. package/src/data/derived.ts +305 -0
  113. package/src/index.ts +157 -0
  114. package/src/spec_loader.ts +591 -0
  115. package/src/tools/api/list_api_models.ts +44 -0
  116. package/src/tools/api/list_api_specs.ts +53 -0
  117. package/src/tools/api/preview_api_model_sync.ts +41 -0
  118. package/src/tools/context/get_project_config.ts +27 -0
  119. package/src/tools/context/list_component_specs.ts +44 -0
  120. package/src/tools/context/list_layouts.ts +131 -0
  121. package/src/tools/context/list_screen_specs.ts +46 -0
  122. package/src/tools/context/read_layout_file.ts +35 -0
  123. package/src/tools/context/read_spec_file.ts +38 -0
  124. package/src/tools/doc/doc_generate_component.ts +43 -0
  125. package/src/tools/doc/doc_generate_html.ts +40 -0
  126. package/src/tools/doc/doc_generate_spec.ts +43 -0
  127. package/src/tools/doc/doc_init_component.ts +32 -0
  128. package/src/tools/doc/doc_init_spec.ts +37 -0
  129. package/src/tools/doc/doc_rules_init.ts +29 -0
  130. package/src/tools/doc/doc_rules_show.ts +27 -0
  131. package/src/tools/doc/doc_validate_component.ts +47 -0
  132. package/src/tools/doc/doc_validate_spec.ts +48 -0
  133. package/src/tools/jui/jui_build.ts +31 -0
  134. package/src/tools/jui/jui_generate_converter.ts +41 -0
  135. package/src/tools/jui/jui_generate_project.ts +37 -0
  136. package/src/tools/jui/jui_generate_screen.ts +28 -0
  137. package/src/tools/jui/jui_init.ts +38 -0
  138. package/src/tools/jui/jui_migrate_layouts.ts +29 -0
  139. package/src/tools/jui/jui_sync_tool.ts +33 -0
  140. package/src/tools/jui/jui_verify.ts +43 -0
  141. package/src/tools/spec/get_binding_rules.ts +16 -0
  142. package/src/tools/spec/get_data_source.ts +53 -0
  143. package/src/tools/spec/get_modifier_order.ts +22 -0
  144. package/src/tools/spec/get_platform_mapping.ts +28 -0
  145. package/src/tools/spec/get_screen_identity.ts +31 -0
  146. package/src/tools/spec/lookup_attribute.ts +22 -0
  147. package/src/tools/spec/lookup_component.ts +23 -0
  148. package/src/tools/spec/search_components.ts +22 -0
  149. package/src/tools/test/test_artifacts_pull.ts +47 -0
  150. package/src/tools/test/test_artifacts_status.ts +34 -0
  151. package/src/tools/test/test_generate_description.ts +33 -0
  152. package/src/tools/test/test_generate_flow.ts +33 -0
  153. package/src/tools/test/test_generate_screen.ts +33 -0
  154. package/src/tools/test/test_mock_generate.ts +58 -0
  155. package/src/tools/test/test_report.ts +32 -0
  156. package/src/tools/test/test_validate.ts +43 -0
  157. package/tests/__snapshots__/derived.test.ts.snap +279 -0
  158. package/tests/bundled_snapshot.test.ts +155 -0
  159. package/tests/cli_runner.test.ts +120 -0
  160. package/tests/config.test.ts +212 -0
  161. package/tests/derived.test.ts +114 -0
  162. package/tests/helpers.ts +272 -0
  163. package/tests/setup.ts +27 -0
  164. package/tests/snapshot_completeness.test.ts +152 -0
  165. package/tests/spec_loader.test.ts +488 -0
  166. package/tests/tools_cli.test.ts +687 -0
  167. package/tests/tools_context.test.ts +274 -0
  168. package/tests/tools_spec.test.ts +225 -0
  169. package/tests/tools_test.test.ts +284 -0
  170. package/tsconfig.json +15 -0
  171. package/uninstall.sh +46 -0
  172. package/vitest.config.ts +15 -0
package/src/index.ts ADDED
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { SpecLoader, mcpRootFromImportMetaUrl } from "./spec_loader.js";
6
+ import { ServerConfig } from "./config.js";
7
+
8
+ // --- Group A: Component Spec Lookup ---
9
+ import { register as registerLookupComponent } from "./tools/spec/lookup_component.js";
10
+ import { register as registerLookupAttribute } from "./tools/spec/lookup_attribute.js";
11
+ import { register as registerSearchComponents } from "./tools/spec/search_components.js";
12
+ import { register as registerGetModifierOrder } from "./tools/spec/get_modifier_order.js";
13
+ import { register as registerGetBindingRules } from "./tools/spec/get_binding_rules.js";
14
+ import { register as registerGetScreenIdentity } from "./tools/spec/get_screen_identity.js";
15
+ import { register as registerGetPlatformMapping } from "./tools/spec/get_platform_mapping.js";
16
+ import { register as registerGetDataSource } from "./tools/spec/get_data_source.js";
17
+
18
+ // --- Group B: Project Context ---
19
+ import { register as registerGetProjectConfig } from "./tools/context/get_project_config.js";
20
+ import { register as registerListScreenSpecs } from "./tools/context/list_screen_specs.js";
21
+ import { register as registerListComponentSpecs } from "./tools/context/list_component_specs.js";
22
+ import { register as registerListLayouts } from "./tools/context/list_layouts.js";
23
+ import { register as registerReadSpecFile } from "./tools/context/read_spec_file.js";
24
+ import { register as registerReadLayoutFile } from "./tools/context/read_layout_file.js";
25
+
26
+ // --- Group C: jui CLI ---
27
+ import { register as registerJuiInit } from "./tools/jui/jui_init.js";
28
+ import { register as registerJuiGenerateProject } from "./tools/jui/jui_generate_project.js";
29
+ import { register as registerJuiGenerateScreen } from "./tools/jui/jui_generate_screen.js";
30
+ import { register as registerJuiGenerateConverter } from "./tools/jui/jui_generate_converter.js";
31
+ import { register as registerJuiBuild } from "./tools/jui/jui_build.js";
32
+ import { register as registerJuiVerify } from "./tools/jui/jui_verify.js";
33
+ import { register as registerJuiMigrateLayouts } from "./tools/jui/jui_migrate_layouts.js";
34
+ import { register as registerJuiSyncTool } from "./tools/jui/jui_sync_tool.js";
35
+
36
+ // --- Group E: API Model Discovery ---
37
+ import { register as registerListApiSpecs } from "./tools/api/list_api_specs.js";
38
+ import { register as registerListApiModels } from "./tools/api/list_api_models.js";
39
+ import { register as registerPreviewApiModelSync } from "./tools/api/preview_api_model_sync.js";
40
+
41
+ // --- Group D: jsonui-doc CLI ---
42
+ import { register as registerDocInitSpec } from "./tools/doc/doc_init_spec.js";
43
+ import { register as registerDocInitComponent } from "./tools/doc/doc_init_component.js";
44
+ import { register as registerDocValidateSpec } from "./tools/doc/doc_validate_spec.js";
45
+ import { register as registerDocValidateComponent } from "./tools/doc/doc_validate_component.js";
46
+ import { register as registerDocGenerateSpec } from "./tools/doc/doc_generate_spec.js";
47
+ import { register as registerDocGenerateComponent } from "./tools/doc/doc_generate_component.js";
48
+ import { register as registerDocGenerateHtml } from "./tools/doc/doc_generate_html.js";
49
+ import { register as registerDocRulesInit } from "./tools/doc/doc_rules_init.js";
50
+ import { register as registerDocRulesShow } from "./tools/doc/doc_rules_show.js";
51
+
52
+ // --- Group F: jsonui-test CLI ---
53
+ import { register as registerTestValidate } from "./tools/test/test_validate.js";
54
+ import { register as registerTestGenerateScreen } from "./tools/test/test_generate_screen.js";
55
+ import { register as registerTestGenerateFlow } from "./tools/test/test_generate_flow.js";
56
+ import { register as registerTestGenerateDescription } from "./tools/test/test_generate_description.js";
57
+ import { register as registerTestReport } from "./tools/test/test_report.js";
58
+ import { register as registerTestMockGenerate } from "./tools/test/test_mock_generate.js";
59
+ import { register as registerTestArtifactsPull } from "./tools/test/test_artifacts_pull.js";
60
+ import { register as registerTestArtifactsStatus } from "./tools/test/test_artifacts_status.js";
61
+
62
+ function log(message: string) {
63
+ console.error(`[jui-tools] ${new Date().toISOString()} ${message}`);
64
+ }
65
+
66
+ log("Server starting...");
67
+
68
+ const server = new McpServer({
69
+ name: "jui-tools",
70
+ version: "2.0.0",
71
+ });
72
+
73
+ // Initialize spec loader for Group A
74
+ // Resolves attribute_definitions.json via 4-layer fallback:
75
+ // JSONUI_CLI_PATH env > ./.jsonui-cli/ > ~/.jsonui-cli/ > bundled snapshot in data/.
76
+ const mcpRoot = mcpRootFromImportMetaUrl(import.meta.url);
77
+ const loader = new SpecLoader(mcpRoot);
78
+ const source = loader.getDataSource();
79
+ log(
80
+ `attribute_definitions: [${source.attributeDefinitions.layer}] ${source.attributeDefinitions.path} (${source.attributeDefinitions.freshness})`
81
+ );
82
+ log(
83
+ `component_metadata: [${source.componentMetadata.layer}] ${source.componentMetadata.path} (${source.componentMetadata.freshness})`
84
+ );
85
+ log(
86
+ `Loaded ${source.componentCount} components, ${source.commonAttributeCount} common attributes`
87
+ );
88
+
89
+ // Initialize server config for Groups B/C/D
90
+ const config = new ServerConfig();
91
+
92
+ // Register Group A: Component Spec Lookup (7 tools)
93
+ registerLookupComponent(server, loader);
94
+ registerLookupAttribute(server, loader);
95
+ registerSearchComponents(server, loader);
96
+ registerGetModifierOrder(server, loader);
97
+ registerGetBindingRules(server, loader);
98
+ registerGetScreenIdentity(server, loader);
99
+ registerGetPlatformMapping(server, loader);
100
+ registerGetDataSource(server, loader);
101
+
102
+ // Register Group B: Project Context (6 tools)
103
+ registerGetProjectConfig(server, config);
104
+ registerListScreenSpecs(server, config);
105
+ registerListComponentSpecs(server, config);
106
+ registerListLayouts(server, config);
107
+ registerReadSpecFile(server, config);
108
+ registerReadLayoutFile(server, config);
109
+
110
+ // Register Group C: jui CLI (8 tools)
111
+ registerJuiInit(server, config);
112
+ registerJuiGenerateProject(server, config);
113
+ registerJuiGenerateScreen(server, config);
114
+ registerJuiGenerateConverter(server, config);
115
+ registerJuiBuild(server, config);
116
+ registerJuiVerify(server, config);
117
+ registerJuiMigrateLayouts(server, config);
118
+ registerJuiSyncTool(server, config);
119
+
120
+ // Register Group D: jsonui-doc CLI (9 tools)
121
+ registerDocInitSpec(server, config);
122
+ registerDocInitComponent(server, config);
123
+ registerDocValidateSpec(server, config);
124
+ registerDocValidateComponent(server, config);
125
+ registerDocGenerateSpec(server, config);
126
+ registerDocGenerateComponent(server, config);
127
+ registerDocGenerateHtml(server, config);
128
+ registerDocRulesInit(server, config);
129
+ registerDocRulesShow(server, config);
130
+
131
+ // Register Group E: API Model Discovery (3 tools)
132
+ registerListApiSpecs(server, config);
133
+ registerListApiModels(server, config);
134
+ registerPreviewApiModelSync(server, config);
135
+
136
+ // Register Group F: jsonui-test CLI (8 tools)
137
+ // mock serve is intentionally NOT exposed (long-running local HTTP server that
138
+ // executes run-targets — kept to direct CLI use only). test_mock_generate
139
+ // covers both scaffold (default) and drift-check (check=true) modes.
140
+ registerTestValidate(server, config);
141
+ registerTestGenerateScreen(server, config);
142
+ registerTestGenerateFlow(server, config);
143
+ registerTestGenerateDescription(server, config);
144
+ registerTestReport(server, config);
145
+ registerTestMockGenerate(server, config);
146
+ registerTestArtifactsPull(server, config);
147
+ registerTestArtifactsStatus(server, config);
148
+
149
+ log(`Registered 41 tools (7 spec + 6 context + 8 jui + 9 doc + 3 api + 8 test)`);
150
+
151
+ async function main() {
152
+ const transport = new StdioServerTransport();
153
+ await server.connect(transport);
154
+ log("Server connected and ready.");
155
+ }
156
+
157
+ main().catch(console.error);