blixify-ui-web-mcp 0.1.1

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 (245) hide show
  1. package/README.md +5 -0
  2. package/lib/components/action/button/README.md +75 -0
  3. package/lib/components/action/button/button.stories.tsx +138 -0
  4. package/lib/components/action/buttonGroup/README.md +79 -0
  5. package/lib/components/action/buttonGroup/buttonGroup.stories.tsx +104 -0
  6. package/lib/components/action/iconButton/README.md +39 -0
  7. package/lib/components/action/iconButton/iconButton.stories.tsx +22 -0
  8. package/lib/components/action/radioList/README.md +98 -0
  9. package/lib/components/action/radioList/radioList.stories.tsx +181 -0
  10. package/lib/components/action/slider/README.md +86 -0
  11. package/lib/components/action/slider/slider.stories.tsx +133 -0
  12. package/lib/components/action/textButton/README.md +34 -0
  13. package/lib/components/action/textButton/textButton.stories.tsx +16 -0
  14. package/lib/components/action/toggle/README.md +39 -0
  15. package/lib/components/action/toggle/toggle.stories.tsx +23 -0
  16. package/lib/components/advanced/collapse/README.md +106 -0
  17. package/lib/components/advanced/collapse/collapse.stories.tsx +165 -0
  18. package/lib/components/advanced/infoWindow/README.md +69 -0
  19. package/lib/components/advanced/infoWindow/infoWindow.stories.tsx +112 -0
  20. package/lib/components/advanced/popUp/README.md +95 -0
  21. package/lib/components/advanced/popUp/popUp.stories.tsx +189 -0
  22. package/lib/components/auth/bareSignIn/README.md +78 -0
  23. package/lib/components/auth/bareSignIn/bareSignIn.stories.tsx +141 -0
  24. package/lib/components/auth/bareSignUp/README.md +130 -0
  25. package/lib/components/auth/bareSignUp/bareSignUp.stories.tsx +159 -0
  26. package/lib/components/auth/signIn/README.md +53 -0
  27. package/lib/components/auth/signIn/signIn.stories.tsx +120 -0
  28. package/lib/components/auth/signUp/README.md +136 -0
  29. package/lib/components/auth/signUp/signUp.stories.tsx +193 -0
  30. package/lib/components/chart/README.md +13 -0
  31. package/lib/components/chart/areaChart/README.md +133 -0
  32. package/lib/components/chart/areaChart/areaChart.stories.tsx +199 -0
  33. package/lib/components/chart/barChart/README.md +193 -0
  34. package/lib/components/chart/barChart/barChart.stories.tsx +318 -0
  35. package/lib/components/chart/boxPlotChart/README.md +124 -0
  36. package/lib/components/chart/boxPlotChart/boxPlotChart.stories.tsx +104 -0
  37. package/lib/components/chart/bubbleChart/README.md +166 -0
  38. package/lib/components/chart/bubbleChart/bubbleChart.stories.tsx +144 -0
  39. package/lib/components/chart/card/README.md +107 -0
  40. package/lib/components/chart/card/card.stories.tsx +89 -0
  41. package/lib/components/chart/ganttChart/README.md +142 -0
  42. package/lib/components/chart/ganttChart/ganttChart.stories.tsx +138 -0
  43. package/lib/components/chart/heatmapChart/README.md +125 -0
  44. package/lib/components/chart/heatmapChart/heatmapChart.stories.tsx +106 -0
  45. package/lib/components/chart/lineChart/README.md +140 -0
  46. package/lib/components/chart/lineChart/lineChart.stories.tsx +152 -0
  47. package/lib/components/chart/pieChart/README.md +117 -0
  48. package/lib/components/chart/pieChart/pieChart.stories.tsx +180 -0
  49. package/lib/components/chart/polarAreaChart/README.md +126 -0
  50. package/lib/components/chart/polarAreaChart/polarAreaChart.stories.tsx +106 -0
  51. package/lib/components/chart/radarChart/README.md +57 -0
  52. package/lib/components/chart/radarChart/radarChart.stories.tsx +36 -0
  53. package/lib/components/chart/radialBar/README.md +152 -0
  54. package/lib/components/chart/radialBar/radialChart.stories.tsx +136 -0
  55. package/lib/components/chart/rangeBarChart/README.md +323 -0
  56. package/lib/components/chart/rangeBarChart/rangeBarChart.stories.tsx +208 -0
  57. package/lib/components/chart/statsCard/README.md +97 -0
  58. package/lib/components/chart/statsCard/statsCard.stories.tsx +183 -0
  59. package/lib/components/chart/treemapChart/README.md +142 -0
  60. package/lib/components/chart/treemapChart/treemapChart.stories.tsx +122 -0
  61. package/lib/components/chat/chatAnchor/README.md +113 -0
  62. package/lib/components/chat/chatAnchor/chatAnchor.stories.tsx +156 -0
  63. package/lib/components/chat/chatBase/README.md +223 -0
  64. package/lib/components/chat/chatBase/chatBase.stories.tsx +306 -0
  65. package/lib/components/chat/chatDashboard/README.md +161 -0
  66. package/lib/components/chat/chatDashboard/chatDashboard.stories.tsx +154 -0
  67. package/lib/components/data/dataGraph/README.md +13 -0
  68. package/lib/components/data/dataGraph/dataGraph.stories.tsx +84 -0
  69. package/lib/components/data/dataReference/README.md +62 -0
  70. package/lib/components/data/dataReference/dataReference.stories.tsx +53 -0
  71. package/lib/components/data/dataTemplate/README.md +903 -0
  72. package/lib/components/data/dataTemplate/dataModule.stories.tsx +196 -0
  73. package/lib/components/data/dataTemplate/dataTemplate.stories.tsx +337 -0
  74. package/lib/components/data/dataWrapper/README.md +1077 -0
  75. package/lib/components/data/dataWrapper/dataWrapper.stories.tsx +831 -0
  76. package/lib/components/data/queryForm/README.md +56 -0
  77. package/lib/components/data/queryForm/queryForm.stories.tsx +85 -0
  78. package/lib/components/data/readQuery/README.md +282 -0
  79. package/lib/components/data/readQuery/readQuery.stories.tsx +256 -0
  80. package/lib/components/data/readQueryHoc/README.md +89 -0
  81. package/lib/components/data/readQueryHoc/readQueryHoc.stories.tsx +33 -0
  82. package/lib/components/data/writeQuery/README.md +178 -0
  83. package/lib/components/data/writeQuery/writeQuery.stories.tsx +209 -0
  84. package/lib/components/design/actionSection/README.md +47 -0
  85. package/lib/components/design/actionSection/actionSection.stories.tsx +74 -0
  86. package/lib/components/design/banner/README.md +43 -0
  87. package/lib/components/design/banner/banner.stories.tsx +34 -0
  88. package/lib/components/design/bannerAction/README.md +44 -0
  89. package/lib/components/design/bannerAction/bannerAction.stories.tsx +25 -0
  90. package/lib/components/design/blogSection/README.md +111 -0
  91. package/lib/components/design/blogSection/blogSection.stories.tsx +72 -0
  92. package/lib/components/design/carouselSection/README.md +82 -0
  93. package/lib/components/design/carouselSection/carouselSection.stories.tsx +52 -0
  94. package/lib/components/design/designList/README.md +60 -0
  95. package/lib/components/design/designList/designList.stories.tsx +44 -0
  96. package/lib/components/design/faq/README.md +121 -0
  97. package/lib/components/design/faq/faq.stories.tsx +103 -0
  98. package/lib/components/design/fileGrid/README.md +87 -0
  99. package/lib/components/design/fileGrid/fileGrid.stories.tsx +110 -0
  100. package/lib/components/design/fileViewer/README.md +40 -0
  101. package/lib/components/design/fileViewer/fileViewer.stories.tsx +28 -0
  102. package/lib/components/design/footerSection/README.md +62 -0
  103. package/lib/components/design/footerSection/footerSection.stories.tsx +84 -0
  104. package/lib/components/design/googleReview/README.md +45 -0
  105. package/lib/components/design/googleReview/googleReview.stories.tsx +33 -0
  106. package/lib/components/design/heroSection/README.md +48 -0
  107. package/lib/components/design/heroSection/heroSection.stories.tsx +85 -0
  108. package/lib/components/design/iconList/README.md +60 -0
  109. package/lib/components/design/iconList/iconList.stories.tsx +41 -0
  110. package/lib/components/design/imageGallery/README.md +56 -0
  111. package/lib/components/design/imageGallery/imageGallery.stories.tsx +45 -0
  112. package/lib/components/design/imageZoom/README.md +47 -0
  113. package/lib/components/design/imageZoom/imageZoom.stories.tsx +30 -0
  114. package/lib/components/design/leftContent/README.md +47 -0
  115. package/lib/components/design/leftContent/leftContent.stories.tsx +32 -0
  116. package/lib/components/design/logoCloud/README.md +42 -0
  117. package/lib/components/design/logoCloud/logoCloud.stories.tsx +44 -0
  118. package/lib/components/design/onboarding/README.md +100 -0
  119. package/lib/components/design/onboarding/onboarding.stories.tsx +113 -0
  120. package/lib/components/design/pricing/README.md +112 -0
  121. package/lib/components/design/pricing/pricing.stories.tsx +86 -0
  122. package/lib/components/design/rightContent/README.md +47 -0
  123. package/lib/components/design/rightContent/rightContent.stories.tsx +32 -0
  124. package/lib/components/design/sectionList/README.md +51 -0
  125. package/lib/components/design/sectionList/sectionList.stories.tsx +35 -0
  126. package/lib/components/design/teams/README.md +62 -0
  127. package/lib/components/design/teams/teams.stories.tsx +61 -0
  128. package/lib/components/display/alert/README.md +82 -0
  129. package/lib/components/display/alert/alert.stories.tsx +71 -0
  130. package/lib/components/display/calendar/README.md +113 -0
  131. package/lib/components/display/calendar/calendar.stories.tsx +159 -0
  132. package/lib/components/display/clipboard/README.md +36 -0
  133. package/lib/components/display/clipboard/clipboard.stories.tsx +32 -0
  134. package/lib/components/display/detailList/README.md +61 -0
  135. package/lib/components/display/detailList/detailList.stories.tsx +131 -0
  136. package/lib/components/display/drawer/README.md +74 -0
  137. package/lib/components/display/drawer/drawer.stories.tsx +66 -0
  138. package/lib/components/display/emptyState/README.md +38 -0
  139. package/lib/components/display/emptyState/emptyState.stories.tsx +22 -0
  140. package/lib/components/display/feeds/README.md +80 -0
  141. package/lib/components/display/feeds/feeds.stories.tsx +75 -0
  142. package/lib/components/display/flexTable/README.md +160 -0
  143. package/lib/components/display/flexTable/flexTable.stories.tsx +313 -0
  144. package/lib/components/display/grid/README.md +121 -0
  145. package/lib/components/display/grid/grid.stories.tsx +234 -0
  146. package/lib/components/display/kanban/README.md +78 -0
  147. package/lib/components/display/kanban/kanban.stories.tsx +133 -0
  148. package/lib/components/display/list/README.md +109 -0
  149. package/lib/components/display/list/list.stories.tsx +188 -0
  150. package/lib/components/display/loading/README.md +25 -0
  151. package/lib/components/display/loading/loading.stories.tsx +15 -0
  152. package/lib/components/display/mapView/README.md +99 -0
  153. package/lib/components/display/mapView/mapView.stories.tsx +225 -0
  154. package/lib/components/display/modal/README.md +43 -0
  155. package/lib/components/display/modal/modal.stories.tsx +81 -0
  156. package/lib/components/display/notification/README.md +43 -0
  157. package/lib/components/display/notification/notification.stories.tsx +30 -0
  158. package/lib/components/display/progress/README.md +25 -0
  159. package/lib/components/display/progress/progress.stories.tsx +15 -0
  160. package/lib/components/display/stepper/README.md +96 -0
  161. package/lib/components/display/stepper/stepper.stories.tsx +175 -0
  162. package/lib/components/display/table/README.md +176 -0
  163. package/lib/components/display/table/table.stories.tsx +330 -0
  164. package/lib/components/display/tag/README.md +74 -0
  165. package/lib/components/display/tag/tag.stories.tsx +79 -0
  166. package/lib/components/input/address/README.md +132 -0
  167. package/lib/components/input/address/address.stories.tsx +147 -0
  168. package/lib/components/input/canvas/README.md +131 -0
  169. package/lib/components/input/canvas/canvas.stories.tsx +165 -0
  170. package/lib/components/input/checkbox/README.md +61 -0
  171. package/lib/components/input/checkbox/checkbox.stories.tsx +30 -0
  172. package/lib/components/input/datePicker/README.md +124 -0
  173. package/lib/components/input/datePicker/datePicker.stories.tsx +197 -0
  174. package/lib/components/input/form/README.md +55 -0
  175. package/lib/components/input/form/form.stories.tsx +143 -0
  176. package/lib/components/input/markdown/README.md +146 -0
  177. package/lib/components/input/markdown/markdown.stories.tsx +40 -0
  178. package/lib/components/input/monthYearPicker/README.md +69 -0
  179. package/lib/components/input/monthYearPicker/monthYearPicker.stories.tsx +47 -0
  180. package/lib/components/input/netPromoterScore/README.md +52 -0
  181. package/lib/components/input/netPromoterScore/netPromoterScore.stories.tsx +30 -0
  182. package/lib/components/input/rating/README.md +51 -0
  183. package/lib/components/input/rating/rating.stories.tsx +30 -0
  184. package/lib/components/input/select/README.md +108 -0
  185. package/lib/components/input/select/select.stories.tsx +286 -0
  186. package/lib/components/input/signature/README.md +106 -0
  187. package/lib/components/input/signature/signature.stories.tsx +188 -0
  188. package/lib/components/input/textArea/README.md +55 -0
  189. package/lib/components/input/textArea/textArea.stories.tsx +30 -0
  190. package/lib/components/input/textInput/README.md +81 -0
  191. package/lib/components/input/textInput/textinput.stories.tsx +231 -0
  192. package/lib/components/input/uploadInput/README.md +134 -0
  193. package/lib/components/input/uploadInput/uploadInput.stories.tsx +193 -0
  194. package/lib/components/navigation/bars/README.md +40 -0
  195. package/lib/components/navigation/bars/bars.stories.tsx +85 -0
  196. package/lib/components/navigation/bottomTab/README.md +53 -0
  197. package/lib/components/navigation/bottomTab/bottomTab.stories.tsx +32 -0
  198. package/lib/components/navigation/breadcrumb/README.md +48 -0
  199. package/lib/components/navigation/breadcrumb/breadcrumb.stories.tsx +27 -0
  200. package/lib/components/navigation/header/README.md +149 -0
  201. package/lib/components/navigation/header/header.stories.tsx +107 -0
  202. package/lib/components/navigation/leftNav/README.md +91 -0
  203. package/lib/components/navigation/leftNav/leftNav.stories.tsx +106 -0
  204. package/lib/components/navigation/tabs/README.md +75 -0
  205. package/lib/components/navigation/tabs/tabs.stories.tsx +60 -0
  206. package/lib/components/structure/column/README.md +40 -0
  207. package/lib/components/structure/column/column.stories.tsx +26 -0
  208. package/lib/components/structure/container/README.md +34 -0
  209. package/lib/components/structure/container/container.stories.tsx +19 -0
  210. package/lib/components/structure/link/README.md +55 -0
  211. package/lib/components/structure/link/link.stories.tsx +30 -0
  212. package/lib/components/structure/text/README.md +42 -0
  213. package/lib/components/structure/text/text.stories.tsx +39 -0
  214. package/lib/components/template/authPage/authPage.stories.tsx +68 -0
  215. package/lib/components/template/landingPage/landingPage.stories.tsx +288 -0
  216. package/lib/components/template/productListing/productListing.stories.tsx +297 -0
  217. package/lib/components/template/productOverview/productOverview.stories.tsx +194 -0
  218. package/lib/components/template/shoppingCart/shoppingCart.stories.tsx +252 -0
  219. package/lib/components/template/userHomePage/userHomePage.stories.tsx +605 -0
  220. package/lib/components/template/userRankingDashboard/userRankingDashboard.stories.tsx +481 -0
  221. package/lib/mcp/server.d.ts +2 -0
  222. package/lib/mcp/server.d.ts.map +1 -0
  223. package/lib/mcp/server.js +33 -0
  224. package/lib/mcp/server.js.map +1 -0
  225. package/lib/mcp/tools/getBackendComponent.d.ts +13 -0
  226. package/lib/mcp/tools/getBackendComponent.d.ts.map +1 -0
  227. package/lib/mcp/tools/getBackendComponent.js +119 -0
  228. package/lib/mcp/tools/getBackendComponent.js.map +1 -0
  229. package/lib/mcp/tools/getComponent.d.ts +17 -0
  230. package/lib/mcp/tools/getComponent.d.ts.map +1 -0
  231. package/lib/mcp/tools/getComponent.js +118 -0
  232. package/lib/mcp/tools/getComponent.js.map +1 -0
  233. package/lib/mcp/tools/listComponents.d.ts +13 -0
  234. package/lib/mcp/tools/listComponents.d.ts.map +1 -0
  235. package/lib/mcp/tools/listComponents.js +113 -0
  236. package/lib/mcp/tools/listComponents.js.map +1 -0
  237. package/lib/mcp/tools/listTemplates.d.ts +13 -0
  238. package/lib/mcp/tools/listTemplates.d.ts.map +1 -0
  239. package/lib/mcp/tools/listTemplates.js +68 -0
  240. package/lib/mcp/tools/listTemplates.js.map +1 -0
  241. package/lib/mcp/tools/suggestTemplate.d.ts +17 -0
  242. package/lib/mcp/tools/suggestTemplate.d.ts.map +1 -0
  243. package/lib/mcp/tools/suggestTemplate.js +212 -0
  244. package/lib/mcp/tools/suggestTemplate.js.map +1 -0
  245. package/package.json +23 -0
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ export declare const getComponentTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ name: z.ZodString;
7
+ };
8
+ handler({ name }: {
9
+ name: string;
10
+ }): Promise<{
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ }>;
16
+ };
17
+ //# sourceMappingURL=getComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getComponent.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/getComponent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqCxB,eAAO,MAAM,gBAAgB;;;;;;;cAYK,MAAM;;;;;;;CAuEvC,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.getComponentTool = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const zod_1 = require("zod");
30
+ // At runtime __dirname is lib/mcp/tools; resolve up to project root then into lib/components
31
+ const PROJECT_ROOT = path.resolve(__dirname, "../../../");
32
+ const COMPONENTS_DIR = fs.existsSync(path.join(PROJECT_ROOT, "src/components"))
33
+ ? path.join(PROJECT_ROOT, "src/components")
34
+ : path.join(PROJECT_ROOT, "lib/components");
35
+ function findComponentDir(name) {
36
+ const lowerName = name.toLowerCase();
37
+ const walk = (dir) => {
38
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
39
+ if (!entry.isDirectory())
40
+ continue;
41
+ const fullPath = path.join(dir, entry.name);
42
+ if (entry.name.toLowerCase() === lowerName) {
43
+ return {
44
+ dir: fullPath,
45
+ relativePath: path.relative(COMPONENTS_DIR, fullPath),
46
+ };
47
+ }
48
+ const found = walk(fullPath);
49
+ if (found)
50
+ return found;
51
+ }
52
+ return null;
53
+ };
54
+ return walk(COMPONENTS_DIR);
55
+ }
56
+ exports.getComponentTool = {
57
+ name: "get_component",
58
+ description: "Get full documentation, props, import path, and usage examples (stories) for any Blixify UI component by name. Works for all components including data, chart, input, display, navigation, etc.",
59
+ inputSchema: {
60
+ name: zod_1.z
61
+ .string()
62
+ .describe("The component name to look up, e.g. 'Button', 'DataTemplateWrapper', 'LineChart', 'Select'"),
63
+ },
64
+ async handler({ name }) {
65
+ const result = findComponentDir(name);
66
+ if (!result) {
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: `Component "${name}" not found in src/components. Use list_components to see all available components.`,
72
+ },
73
+ ],
74
+ };
75
+ }
76
+ const { dir: componentDir, relativePath } = result;
77
+ const importPath = `blixify-ui-web/${relativePath.replace(/\\/g, "/")}`;
78
+ const componentName = path.basename(componentDir);
79
+ const sections = [
80
+ `# ${componentName} Component`,
81
+ `**Import:** \`import { ${componentName.charAt(0).toUpperCase() + componentName.slice(1)} } from "${importPath}"\``,
82
+ ];
83
+ // README
84
+ const readmePath = path.join(componentDir, "README.md");
85
+ if (fs.existsSync(readmePath)) {
86
+ const readme = fs.readFileSync(readmePath, "utf-8");
87
+ sections.push("## Documentation\n\n" + readme);
88
+ }
89
+ // Stories
90
+ const files = fs.readdirSync(componentDir);
91
+ const storiesFile = files.find((f) => f.endsWith(".stories.tsx") || f.endsWith(".stories.ts"));
92
+ if (storiesFile) {
93
+ const storiesContent = fs.readFileSync(path.join(componentDir, storiesFile), "utf-8");
94
+ sections.push("## Usage Examples (Stories)\n\n```tsx\n" + storiesContent + "\n```");
95
+ }
96
+ if (sections.length === 2) {
97
+ // Only header + import line, no docs found
98
+ return {
99
+ content: [
100
+ {
101
+ type: "text",
102
+ text: sections.join("\n\n") +
103
+ `\n\nComponent found at \`${componentDir}\` but has no README or stories file.`,
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ return {
109
+ content: [
110
+ {
111
+ type: "text",
112
+ text: sections.join("\n\n---\n\n"),
113
+ },
114
+ ],
115
+ };
116
+ },
117
+ };
118
+ //# sourceMappingURL=getComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getComponent.js","sourceRoot":"","sources":["../../../src/mcp/tools/getComponent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ export declare const listComponentsTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ handler(): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ }>;
12
+ };
13
+ //# sourceMappingURL=listComponents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listComponents.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listComponents.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8DxB,eAAO,MAAM,kBAAkB;;;;;;;;;;CAsD9B,CAAC"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.listComponentsTool = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const zod_1 = require("zod");
30
+ // At runtime __dirname is lib/mcp/tools; resolve up to project root then into lib/components
31
+ const PROJECT_ROOT = path.resolve(__dirname, "../../../");
32
+ const COMPONENTS_DIR = fs.existsSync(path.join(PROJECT_ROOT, "src/components"))
33
+ ? path.join(PROJECT_ROOT, "src/components")
34
+ : path.join(PROJECT_ROOT, "lib/components");
35
+ // Categories to exclude from the UI component listing
36
+ // (templates are surfaced via suggest_template; data via get_backend_component)
37
+ const EXCLUDE_DIRS = new Set(["template", "data"]);
38
+ function collectComponents(dir, results = []) {
39
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
40
+ if (!entry.isDirectory())
41
+ continue;
42
+ const fullPath = path.join(dir, entry.name);
43
+ const relFromComponents = path.relative(COMPONENTS_DIR, fullPath);
44
+ const parts = relFromComponents.split(path.sep);
45
+ // Skip excluded top-level categories
46
+ if (EXCLUDE_DIRS.has(parts[0]))
47
+ continue;
48
+ const hasIndex = fs.existsSync(path.join(fullPath, "index.tsx")) ||
49
+ fs.existsSync(path.join(fullPath, "index.ts"));
50
+ if (hasIndex) {
51
+ const category = parts[0];
52
+ const name = parts[parts.length - 1];
53
+ const files = fs.readdirSync(fullPath);
54
+ results.push({
55
+ name,
56
+ category,
57
+ relativePath: relFromComponents,
58
+ importPath: `blixify-ui-web/${relFromComponents.replace(/\\/g, "/")}`,
59
+ hasReadme: files.includes("README.md"),
60
+ hasStories: files.some((f) => f.endsWith(".stories.tsx") || f.endsWith(".stories.ts")),
61
+ });
62
+ }
63
+ // Always recurse
64
+ collectComponents(fullPath, results);
65
+ }
66
+ return results;
67
+ }
68
+ exports.listComponentsTool = {
69
+ name: "list_components",
70
+ description: "List all available Blixify UI components grouped by category, with their import paths. Use get_component to fetch full docs and usage examples for a specific component.",
71
+ inputSchema: zod_1.z.object({}),
72
+ async handler() {
73
+ const components = collectComponents(COMPONENTS_DIR);
74
+ if (components.length === 0) {
75
+ return {
76
+ content: [{ type: "text", text: "No components found." }],
77
+ };
78
+ }
79
+ // Group by category
80
+ const byCategory = {};
81
+ for (const c of components) {
82
+ if (!byCategory[c.category])
83
+ byCategory[c.category] = [];
84
+ byCategory[c.category].push(c);
85
+ }
86
+ const lines = [
87
+ `# Blixify UI Components (${components.length} total)\n`,
88
+ "Use `get_component` with the component name to get full docs and usage examples.\n",
89
+ ];
90
+ for (const [category, entries] of Object.entries(byCategory).sort()) {
91
+ lines.push(`## ${category}`);
92
+ for (const e of entries) {
93
+ const flags = [
94
+ e.hasReadme ? "📖 README" : "",
95
+ e.hasStories ? "💡 stories" : "",
96
+ ]
97
+ .filter(Boolean)
98
+ .join(", ");
99
+ lines.push(`- **${e.name}** — \`import { } from "${e.importPath}"\` ${flags ? `(${flags})` : ""}`);
100
+ }
101
+ lines.push("");
102
+ }
103
+ return {
104
+ content: [
105
+ {
106
+ type: "text",
107
+ text: lines.join("\n"),
108
+ },
109
+ ],
110
+ };
111
+ },
112
+ };
113
+ //# sourceMappingURL=listComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listComponents.js","sourceRoot":"","sources":["../../../src/mcp/tools/listComponents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ export declare const listTemplatesTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ handler(): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ }>;
12
+ };
13
+ //# sourceMappingURL=listTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTemplates.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listTemplates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,iBAAiB;;;;;;;;;;CAuC7B,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.listTemplatesTool = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const zod_1 = require("zod");
30
+ const PROJECT_ROOT = path.resolve(__dirname, "../../../");
31
+ const TEMPLATES_DIR = fs.existsSync(path.join(PROJECT_ROOT, "src/components/template"))
32
+ ? path.join(PROJECT_ROOT, "src/components/template")
33
+ : path.join(PROJECT_ROOT, "lib/components/template");
34
+ exports.listTemplatesTool = {
35
+ name: "list_templates",
36
+ description: "List all available UI templates from Blixify UI Web",
37
+ inputSchema: zod_1.z.object({}),
38
+ async handler() {
39
+ const templates = [];
40
+ for (const entry of fs.readdirSync(TEMPLATES_DIR, {
41
+ withFileTypes: true,
42
+ })) {
43
+ if (entry.isDirectory()) {
44
+ const hasStories = fs
45
+ .readdirSync(path.join(TEMPLATES_DIR, entry.name))
46
+ .some((f) => f.endsWith(".stories.tsx") || f.endsWith(".stories.ts"));
47
+ if (hasStories) {
48
+ templates.push(entry.name);
49
+ }
50
+ }
51
+ }
52
+ if (templates.length === 0) {
53
+ return {
54
+ content: [{ type: "text", text: "No templates found." }],
55
+ };
56
+ }
57
+ const text = templates.map((t) => `- ${t}`).join("\n");
58
+ return {
59
+ content: [
60
+ {
61
+ type: "text",
62
+ text: `Available templates (${templates.length}):\n\n${text}`,
63
+ },
64
+ ],
65
+ };
66
+ },
67
+ };
68
+ //# sourceMappingURL=listTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTemplates.js","sourceRoot":"","sources":["../../../src/mcp/tools/listTemplates.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,6BAAwB;AAExB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CACjC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CACnD;IACC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC;IACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;AAE1C,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,qDAAqD;IAClE,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAEzB,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE;YAChD,aAAa,EAAE,IAAI;SACpB,CAAC,EAAE;YACF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;gBACvB,MAAM,UAAU,GAAG,EAAE;qBAClB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBACjD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAExE,IAAI,UAAU,EAAE;oBACd,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC5B;aACF;SACF;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;aAClE,CAAC;SACH;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB,SAAS,CAAC,MAAM,SAAS,IAAI,EAAE;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ export declare const suggestTemplateTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ query: z.ZodString;
7
+ };
8
+ handler({ query }: {
9
+ query: string;
10
+ }): Promise<{
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ }>;
16
+ };
17
+ //# sourceMappingURL=suggestTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestTemplate.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/suggestTemplate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoJxB,eAAO,MAAM,mBAAmB;;;;;;;eAYI,MAAM;;;;;;;CAwDzC,CAAC"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.suggestTemplateTool = void 0;
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const zod_1 = require("zod");
30
+ const PROJECT_ROOT = path.resolve(__dirname, "../../../");
31
+ const TEMPLATES_DIR = fs.existsSync(path.join(PROJECT_ROOT, "src/components/template"))
32
+ ? path.join(PROJECT_ROOT, "src/components/template")
33
+ : path.join(PROJECT_ROOT, "lib/components/template");
34
+ /**
35
+ * Static metadata extracted from each template's stories file.
36
+ * Describes what the template is for and which components it uses.
37
+ */
38
+ const TEMPLATE_METADATA = {
39
+ authPage: {
40
+ description: "Sign-in / sign-up page with a footer.",
41
+ useCase: ["auth", "login", "sign in", "sign up", "authentication"],
42
+ components: ["BareSignIn", "FooterSection"],
43
+ },
44
+ landingPage: {
45
+ description: "Marketing landing page with hero, features, pricing chart, partner logos, CTA, and footer.",
46
+ useCase: [
47
+ "landing",
48
+ "marketing",
49
+ "homepage",
50
+ "product page",
51
+ "pricing",
52
+ "features",
53
+ ],
54
+ components: [
55
+ "Header",
56
+ "HeroSection",
57
+ "LeftContent",
58
+ "RightContent",
59
+ "SectionList",
60
+ "IconList",
61
+ "ButtonGroup",
62
+ "BarChart",
63
+ "LogoCloud",
64
+ "ActionSection",
65
+ "FooterSection",
66
+ ],
67
+ },
68
+ productListing: {
69
+ description: "E-commerce product listing page with a header, hero banner, product grid, customer reviews list, CTA, and footer.",
70
+ useCase: [
71
+ "ecommerce",
72
+ "product listing",
73
+ "shop",
74
+ "store",
75
+ "catalogue",
76
+ "products",
77
+ ],
78
+ components: [
79
+ "Header",
80
+ "HeroSection",
81
+ "Grid",
82
+ "List",
83
+ "Rating",
84
+ "ActionSection",
85
+ "FooterSection",
86
+ ],
87
+ },
88
+ productOverview: {
89
+ description: "Single product detail / overview page.",
90
+ useCase: [
91
+ "product detail",
92
+ "product overview",
93
+ "item detail",
94
+ "product page",
95
+ ],
96
+ components: ["Header", "Grid", "FooterSection"],
97
+ },
98
+ shoppingCart: {
99
+ description: "Shopping cart / checkout page.",
100
+ useCase: ["cart", "checkout", "shopping cart", "order summary"],
101
+ components: ["Header", "List", "FooterSection"],
102
+ },
103
+ userHomePage: {
104
+ description: "Consumer-facing home page with hero, qualification checklist, use-case grid, how-it-works steps, FAQ, Google reviews, and CTA.",
105
+ useCase: [
106
+ "home page",
107
+ "consumer",
108
+ "service page",
109
+ "how it works",
110
+ "faq",
111
+ "testimonials",
112
+ ],
113
+ components: [
114
+ "Header",
115
+ "Grid",
116
+ "Modal",
117
+ "IconList",
118
+ "Select",
119
+ "TextInput",
120
+ "FAQContent",
121
+ "GoogleReview",
122
+ "ActionSection",
123
+ "FooterSection",
124
+ ],
125
+ },
126
+ userRankingDashboard: {
127
+ description: "Admin analytics dashboard with a user leaderboard, stats panel, line chart, and tab navigation.",
128
+ useCase: [
129
+ "dashboard",
130
+ "admin",
131
+ "analytics",
132
+ "leaderboard",
133
+ "ranking",
134
+ "stats",
135
+ "charts",
136
+ ],
137
+ components: [
138
+ "Tabs",
139
+ "LineChart",
140
+ "ButtonGroup",
141
+ "Select",
142
+ "TextInput",
143
+ "Container",
144
+ ],
145
+ },
146
+ };
147
+ function scoreTemplate(query, keywords) {
148
+ const q = query.toLowerCase();
149
+ return keywords.filter((kw) => q.includes(kw)).length;
150
+ }
151
+ function readStoriesFile(templateName) {
152
+ const dir = path.join(TEMPLATES_DIR, templateName);
153
+ if (!fs.existsSync(dir))
154
+ return null;
155
+ const file = fs
156
+ .readdirSync(dir)
157
+ .find((f) => f.endsWith(".stories.tsx") || f.endsWith(".stories.ts"));
158
+ return file ? fs.readFileSync(path.join(dir, file), "utf-8") : null;
159
+ }
160
+ exports.suggestTemplateTool = {
161
+ name: "suggest_template",
162
+ description: "Given a description of the page you want to build, recommends the best matching Blixify UI template and lists the components it uses, with the full stories code as a reference.",
163
+ inputSchema: {
164
+ query: zod_1.z
165
+ .string()
166
+ .describe("Describe the page you want to build, e.g. 'an admin dashboard with charts and a user list' or 'a product listing page for an online store'"),
167
+ },
168
+ async handler({ query }) {
169
+ // Score each template against the query
170
+ const scored = Object.entries(TEMPLATE_METADATA).map(([name, meta]) => ({
171
+ name,
172
+ meta,
173
+ score: scoreTemplate(query, meta.useCase),
174
+ }));
175
+ scored.sort((a, b) => b.score - a.score);
176
+ const best = scored[0];
177
+ // Build the response
178
+ const sections = [];
179
+ sections.push(`# Suggested Template: \`${best.name}\`\n`);
180
+ sections.push(`**What it is:** ${best.meta.description}\n`);
181
+ sections.push(`**Components used:**\n${best.meta.components
182
+ .map((c) => `- \`${c}\``)
183
+ .join("\n")}`);
184
+ // Runner-up if score is tied or close
185
+ const runnerUp = scored[1];
186
+ if (runnerUp && (runnerUp.score >= best.score - 1 || best.score === 0)) {
187
+ sections.push(`\n**Also consider:** \`${runnerUp.name}\` — ${runnerUp.meta.description}\n` +
188
+ `Components: ${runnerUp.meta.components
189
+ .map((c) => `\`${c}\``)
190
+ .join(", ")}`);
191
+ }
192
+ // All templates overview (so the caller knows what else exists)
193
+ const allList = Object.entries(TEMPLATE_METADATA)
194
+ .map(([name, m]) => `- \`${name}\`: ${m.description}`)
195
+ .join("\n");
196
+ sections.push(`\n---\n\n## All Available Templates\n\n${allList}`);
197
+ // Full stories code for the best match
198
+ const stories = readStoriesFile(best.name);
199
+ if (stories) {
200
+ sections.push(`\n---\n\n## \`${best.name}\` — Full Stories Code\n\n\`\`\`tsx\n${stories}\n\`\`\``);
201
+ }
202
+ return {
203
+ content: [
204
+ {
205
+ type: "text",
206
+ text: sections.join("\n\n"),
207
+ },
208
+ ],
209
+ };
210
+ },
211
+ };
212
+ //# sourceMappingURL=suggestTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestTemplate.js","sourceRoot":"","sources":["../../../src/mcp/tools/suggestTemplate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "blixify-ui-web-mcp",
3
+ "version": "0.1.1",
4
+ "license": "MIT",
5
+ "main": "lib/mcp/server.js",
6
+ "bin": {
7
+ "blixify-ui-web-mcp": "lib/mcp/server.js"
8
+ },
9
+ "private": false,
10
+ "files": ["lib/mcp", "lib/components"],
11
+ "scripts": {
12
+ "build": "tsc --build \"./tsconfig.mcp.json\"",
13
+ "clean": "rm -rf ./lib/mcp"
14
+ },
15
+ "dependencies": {
16
+ "@modelcontextprotocol/sdk": "^1.27.1",
17
+ "zod": "^3.0.0"
18
+ },
19
+ "devDependencies": {
20
+ "@types/node": "^16.7.13",
21
+ "typescript": "~5.1.6"
22
+ }
23
+ }