@redsift/ds-mcp-server 12.3.1-muiv6-alpha.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.
Files changed (258) hide show
  1. package/README.md +203 -0
  2. package/consumer-instructions/.cursorrules +80 -0
  3. package/consumer-instructions/.windsurfrules +80 -0
  4. package/consumer-instructions/CLAUDE.md +87 -0
  5. package/consumer-instructions/redsift-design-system.instructions.md +87 -0
  6. package/data/demos/patterns/crossfiltered-datagrid-page/example.tsx +750 -0
  7. package/data/demos/patterns/crossfiltered-datagrid-page/with-empty-state.tsx +111 -0
  8. package/data/demos/patterns/crossfiltered-datagrid-page/with-error.tsx +122 -0
  9. package/data/demos/patterns/crossfiltered-datagrid-page/with-loading.tsx +88 -0
  10. package/data/demos/patterns/datagrid-page/example.tsx +521 -0
  11. package/data/demos/patterns/datagrid-page/with-empty-state.tsx +80 -0
  12. package/data/demos/patterns/datagrid-page/with-error.tsx +96 -0
  13. package/data/demos/patterns/datagrid-page/with-loading.tsx +57 -0
  14. package/data/demos/patterns/drilldown-datagrid-page/example.tsx +715 -0
  15. package/data/demos/patterns/drilldown-datagrid-page/with-empty-state.tsx +113 -0
  16. package/data/demos/patterns/drilldown-datagrid-page/with-error.tsx +125 -0
  17. package/data/demos/patterns/drilldown-datagrid-page/with-loading.tsx +90 -0
  18. package/data/demos/patterns/server-datagrid-page/example.tsx +757 -0
  19. package/data/demos/patterns/server-datagrid-page/with-empty-state.tsx +107 -0
  20. package/data/demos/patterns/server-datagrid-page/with-error.tsx +107 -0
  21. package/data/demos/patterns/server-datagrid-page/with-loading.tsx +63 -0
  22. package/data/docs/components/charts/Arc.json +179 -0
  23. package/data/docs/components/charts/Arcs.json +104 -0
  24. package/data/docs/components/charts/Axis.json +269 -0
  25. package/data/docs/components/charts/Bar.json +236 -0
  26. package/data/docs/components/charts/BarChart.json +852 -0
  27. package/data/docs/components/charts/BarChartBars.json +18 -0
  28. package/data/docs/components/charts/BarChartGroupedTooltip.json +9 -0
  29. package/data/docs/components/charts/BarChartOverlay.json +34 -0
  30. package/data/docs/components/charts/BarChartSection.json +94 -0
  31. package/data/docs/components/charts/BaseBarChart.json +852 -0
  32. package/data/docs/components/charts/ChartContainerTitle.json +574 -0
  33. package/data/docs/components/charts/DataPoint.json +160 -0
  34. package/data/docs/components/charts/Dot.json +191 -0
  35. package/data/docs/components/charts/EmptyBarChart.json +852 -0
  36. package/data/docs/components/charts/EmptyLineChart.json +753 -0
  37. package/data/docs/components/charts/EmptyPieChart.json +826 -0
  38. package/data/docs/components/charts/EmptyScatterPlot.json +802 -0
  39. package/data/docs/components/charts/Legend.json +510 -0
  40. package/data/docs/components/charts/LegendItem.json +128 -0
  41. package/data/docs/components/charts/Line.json +69 -0
  42. package/data/docs/components/charts/LineChart.json +753 -0
  43. package/data/docs/components/charts/LoadingBarChart.json +852 -0
  44. package/data/docs/components/charts/LoadingLineChart.json +753 -0
  45. package/data/docs/components/charts/LoadingPieChart.json +826 -0
  46. package/data/docs/components/charts/LoadingScatterPlot.json +802 -0
  47. package/data/docs/components/charts/PieChart.json +826 -0
  48. package/data/docs/components/charts/RenderedLineChart.json +753 -0
  49. package/data/docs/components/charts/RenderedLinearBarChart.json +823 -0
  50. package/data/docs/components/charts/RenderedOrdinalBarChart.json +852 -0
  51. package/data/docs/components/charts/RenderedPieChart.json +826 -0
  52. package/data/docs/components/charts/RenderedScatterPlot.json +802 -0
  53. package/data/docs/components/charts/ScatterPlot.json +802 -0
  54. package/data/docs/components/charts/getAxisType.json +9 -0
  55. package/data/docs/components/charts/getComponentPosition.json +9 -0
  56. package/data/docs/components/dashboard/ChartEmptyState.json +42 -0
  57. package/data/docs/components/dashboard/Dashboard.json +26 -0
  58. package/data/docs/components/dashboard/DataCard.json +300 -0
  59. package/data/docs/components/dashboard/DataCardBody.json +431 -0
  60. package/data/docs/components/dashboard/DataCardHeader.json +304 -0
  61. package/data/docs/components/dashboard/DataCardListbox.json +529 -0
  62. package/data/docs/components/dashboard/DataRow.json +539 -0
  63. package/data/docs/components/dashboard/DrilldownItem.json +342 -0
  64. package/data/docs/components/dashboard/FilterableBarChart.json +83 -0
  65. package/data/docs/components/dashboard/FilterableDataGrid.json +83 -0
  66. package/data/docs/components/dashboard/FilterablePieChart.json +83 -0
  67. package/data/docs/components/dashboard/FilterableScatterPlot.json +83 -0
  68. package/data/docs/components/dashboard/PdfDocument.json +58 -0
  69. package/data/docs/components/dashboard/PdfExportButton.json +458 -0
  70. package/data/docs/components/dashboard/TimeSeriesBarChart.json +172 -0
  71. package/data/docs/components/dashboard/WithFilters.json +83 -0
  72. package/data/docs/components/design-system/ActiveDescendantListbox.json +521 -0
  73. package/data/docs/components/design-system/Alert.json +349 -0
  74. package/data/docs/components/design-system/AppBar.json +64 -0
  75. package/data/docs/components/design-system/AppContainer.json +67 -0
  76. package/data/docs/components/design-system/AppContent.json +566 -0
  77. package/data/docs/components/design-system/AppSidePanel.json +87 -0
  78. package/data/docs/components/design-system/Badge.json +293 -0
  79. package/data/docs/components/design-system/BaseBreadcrumbs.json +298 -0
  80. package/data/docs/components/design-system/BaseGrid.json +543 -0
  81. package/data/docs/components/design-system/BaseSkeleton.json +338 -0
  82. package/data/docs/components/design-system/BreadcrumbItem.json +231 -0
  83. package/data/docs/components/design-system/Breadcrumbs.json +298 -0
  84. package/data/docs/components/design-system/Button.json +402 -0
  85. package/data/docs/components/design-system/ButtonGroup.json +415 -0
  86. package/data/docs/components/design-system/ButtonLink.json +568 -0
  87. package/data/docs/components/design-system/Card.json +328 -0
  88. package/data/docs/components/design-system/CardActions.json +431 -0
  89. package/data/docs/components/design-system/CardBody.json +431 -0
  90. package/data/docs/components/design-system/CardHeader.json +428 -0
  91. package/data/docs/components/design-system/Checkbox.json +426 -0
  92. package/data/docs/components/design-system/CheckboxGroup.json +382 -0
  93. package/data/docs/components/design-system/ConditionalWrapper.json +40 -0
  94. package/data/docs/components/design-system/DetailedCard.json +401 -0
  95. package/data/docs/components/design-system/DetailedCardCollapsibleSectionItems.json +29 -0
  96. package/data/docs/components/design-system/DetailedCardHeader.json +37 -0
  97. package/data/docs/components/design-system/DetailedCardSection.json +90 -0
  98. package/data/docs/components/design-system/DetailedCardSectionItem.json +109 -0
  99. package/data/docs/components/design-system/Flexbox.json +523 -0
  100. package/data/docs/components/design-system/FocusWithinGroup.json +9 -0
  101. package/data/docs/components/design-system/Grid.json +543 -0
  102. package/data/docs/components/design-system/GridItem.json +388 -0
  103. package/data/docs/components/design-system/Heading.json +390 -0
  104. package/data/docs/components/design-system/Icon.json +325 -0
  105. package/data/docs/components/design-system/IconButton.json +371 -0
  106. package/data/docs/components/design-system/IconButtonLink.json +588 -0
  107. package/data/docs/components/design-system/Item.json +554 -0
  108. package/data/docs/components/design-system/Link.json +552 -0
  109. package/data/docs/components/design-system/LinkButton.json +397 -0
  110. package/data/docs/components/design-system/Listbox.json +529 -0
  111. package/data/docs/components/design-system/Number.json +773 -0
  112. package/data/docs/components/design-system/NumberField.json +594 -0
  113. package/data/docs/components/design-system/Pill.json +378 -0
  114. package/data/docs/components/design-system/ProgressBar.json +121 -0
  115. package/data/docs/components/design-system/RadarSvgLinearGradient.json +9 -0
  116. package/data/docs/components/design-system/Radio.json +415 -0
  117. package/data/docs/components/design-system/RadioGroup.json +382 -0
  118. package/data/docs/components/design-system/RenderedListboxItem.json +18 -0
  119. package/data/docs/components/design-system/RovingTabindexListbox.json +521 -0
  120. package/data/docs/components/design-system/Shield.json +360 -0
  121. package/data/docs/components/design-system/SideNavigationMenu.json +144 -0
  122. package/data/docs/components/design-system/SideNavigationMenuBar.json +89 -0
  123. package/data/docs/components/design-system/SideNavigationMenuItem.json +319 -0
  124. package/data/docs/components/design-system/Skeleton.json +338 -0
  125. package/data/docs/components/design-system/SkeletonCircle.json +338 -0
  126. package/data/docs/components/design-system/SkeletonText.json +371 -0
  127. package/data/docs/components/design-system/Spinner.json +291 -0
  128. package/data/docs/components/design-system/Switch.json +415 -0
  129. package/data/docs/components/design-system/SwitchGroup.json +382 -0
  130. package/data/docs/components/design-system/Text.json +418 -0
  131. package/data/docs/components/design-system/TextArea.json +501 -0
  132. package/data/docs/components/design-system/TextField.json +539 -0
  133. package/data/docs/components/design-system/sizeToDimension.json +9 -0
  134. package/data/docs/components/pickers/BaseCombobox.json +320 -0
  135. package/data/docs/components/pickers/BaseComboboxContent.json +453 -0
  136. package/data/docs/components/pickers/BaseMenuButton.json +240 -0
  137. package/data/docs/components/pickers/BaseMenuButtonContent.json +442 -0
  138. package/data/docs/components/pickers/BaseSelect.json +258 -0
  139. package/data/docs/components/pickers/Combobox.json +320 -0
  140. package/data/docs/components/pickers/ComboboxContent.json +453 -0
  141. package/data/docs/components/pickers/ComboboxContentFooter.json +431 -0
  142. package/data/docs/components/pickers/ComboboxContentHeader.json +431 -0
  143. package/data/docs/components/pickers/ComboboxContentListbox.json +541 -0
  144. package/data/docs/components/pickers/ComboboxTrigger.json +336 -0
  145. package/data/docs/components/pickers/Item.json +554 -0
  146. package/data/docs/components/pickers/MenuButton.json +240 -0
  147. package/data/docs/components/pickers/MenuButtonContent.json +442 -0
  148. package/data/docs/components/pickers/MenuButtonContentFooter.json +431 -0
  149. package/data/docs/components/pickers/MenuButtonContentHeader.json +431 -0
  150. package/data/docs/components/pickers/MenuButtonContentMenu.json +523 -0
  151. package/data/docs/components/pickers/MenuButtonTrigger.json +287 -0
  152. package/data/docs/components/pickers/Select.json +258 -0
  153. package/data/docs/components/pickers/SelectContent.json +442 -0
  154. package/data/docs/components/pickers/SelectTrigger.json +298 -0
  155. package/data/docs/components/popovers/BaseDialog.json +114 -0
  156. package/data/docs/components/popovers/BaseDialogContent.json +21 -0
  157. package/data/docs/components/popovers/BasePopover.json +171 -0
  158. package/data/docs/components/popovers/BaseToggletip.json +184 -0
  159. package/data/docs/components/popovers/BaseTooltip.json +121 -0
  160. package/data/docs/components/popovers/Button.json +402 -0
  161. package/data/docs/components/popovers/ButtonLink.json +568 -0
  162. package/data/docs/components/popovers/Dialog.json +114 -0
  163. package/data/docs/components/popovers/DialogContent.json +21 -0
  164. package/data/docs/components/popovers/DialogContentActions.json +442 -0
  165. package/data/docs/components/popovers/DialogContentBody.json +442 -0
  166. package/data/docs/components/popovers/DialogContentHeader.json +76 -0
  167. package/data/docs/components/popovers/DialogTrigger.json +276 -0
  168. package/data/docs/components/popovers/IconButton.json +371 -0
  169. package/data/docs/components/popovers/IconButtonLink.json +588 -0
  170. package/data/docs/components/popovers/Link.json +552 -0
  171. package/data/docs/components/popovers/LinkButton.json +397 -0
  172. package/data/docs/components/popovers/Popover.json +171 -0
  173. package/data/docs/components/popovers/PopoverContent.json +442 -0
  174. package/data/docs/components/popovers/PopoverTrigger.json +276 -0
  175. package/data/docs/components/popovers/Toast.json +145 -0
  176. package/data/docs/components/popovers/ToastContainer.json +122 -0
  177. package/data/docs/components/popovers/Toggletip.json +184 -0
  178. package/data/docs/components/popovers/ToggletipContent.json +402 -0
  179. package/data/docs/components/popovers/ToggletipTrigger.json +276 -0
  180. package/data/docs/components/popovers/Tooltip.json +121 -0
  181. package/data/docs/components/popovers/TooltipContent.json +402 -0
  182. package/data/docs/components/popovers/TooltipTrigger.json +276 -0
  183. package/data/docs/components/products/Dialog.json +106 -0
  184. package/data/docs/components/products/MenuButton.json +232 -0
  185. package/data/docs/components/products/PulsedRadarImage.json +9 -0
  186. package/data/docs/components/products/RadarButton.json +402 -0
  187. package/data/docs/components/products/RadarItem.json +554 -0
  188. package/data/docs/components/table/ControlledPagination.json +9 -0
  189. package/data/docs/components/table/DataGrid.json +93 -0
  190. package/data/docs/components/table/GridToolbarFilterSemanticField.json +69 -0
  191. package/data/docs/components/table/ServerSideControlledPagination.json +9 -0
  192. package/data/docs/components/table/StatefulDataGrid.json +117 -0
  193. package/data/docs/components/table/TextCell.json +118 -0
  194. package/data/docs/components/table/Toolbar.json +145 -0
  195. package/data/docs/components/table/ToolbarWrapper.json +9 -0
  196. package/data/docs/components-index.json +1206 -0
  197. package/data/docs/components.json +55694 -0
  198. package/data/docs/llms-full.txt +8012 -0
  199. package/data/docs/llms.txt +234 -0
  200. package/data/docs/patterns-catalog.md +359 -0
  201. package/data/docs/patterns.json +712 -0
  202. package/data/metadata.json +4 -0
  203. package/data/patterns/crossfiltered-datagrid-page.mdx +386 -0
  204. package/data/patterns/datagrid-page.mdx +214 -0
  205. package/data/patterns/drilldown-datagrid-page.mdx +291 -0
  206. package/data/patterns/server-datagrid-page.mdx +301 -0
  207. package/data/tokens/properties/components/dark-components.json +1108 -0
  208. package/data/tokens/properties/components/light-components.json +1108 -0
  209. package/data/tokens/properties/core/border-radius.json +3 -0
  210. package/data/tokens/properties/core/color.json +280 -0
  211. package/data/tokens/properties/core/layout.json +14 -0
  212. package/data/tokens/properties/core/typography.json +199 -0
  213. package/data/tokens/redsift-design-tokens.css +1391 -0
  214. package/dist/data-store.d.ts +47 -0
  215. package/dist/data-store.d.ts.map +1 -0
  216. package/dist/data-store.js +152 -0
  217. package/dist/data-store.js.map +1 -0
  218. package/dist/index.d.ts +16 -0
  219. package/dist/index.d.ts.map +1 -0
  220. package/dist/index.js +50 -0
  221. package/dist/index.js.map +1 -0
  222. package/dist/init.d.ts +14 -0
  223. package/dist/init.d.ts.map +1 -0
  224. package/dist/init.js +137 -0
  225. package/dist/init.js.map +1 -0
  226. package/dist/paths.d.ts +30 -0
  227. package/dist/paths.d.ts.map +1 -0
  228. package/dist/paths.js +53 -0
  229. package/dist/paths.js.map +1 -0
  230. package/dist/pattern-store.d.ts +41 -0
  231. package/dist/pattern-store.d.ts.map +1 -0
  232. package/dist/pattern-store.js +177 -0
  233. package/dist/pattern-store.js.map +1 -0
  234. package/dist/prompts.d.ts +14 -0
  235. package/dist/prompts.d.ts.map +1 -0
  236. package/dist/prompts.js +762 -0
  237. package/dist/prompts.js.map +1 -0
  238. package/dist/resources.d.ts +14 -0
  239. package/dist/resources.d.ts.map +1 -0
  240. package/dist/resources.js +482 -0
  241. package/dist/resources.js.map +1 -0
  242. package/dist/scaffold.d.ts +31 -0
  243. package/dist/scaffold.d.ts.map +1 -0
  244. package/dist/scaffold.js +239 -0
  245. package/dist/scaffold.js.map +1 -0
  246. package/dist/token-store.d.ts +70 -0
  247. package/dist/token-store.d.ts.map +1 -0
  248. package/dist/token-store.js +196 -0
  249. package/dist/token-store.js.map +1 -0
  250. package/dist/tools.d.ts +15 -0
  251. package/dist/tools.d.ts.map +1 -0
  252. package/dist/tools.js +491 -0
  253. package/dist/tools.js.map +1 -0
  254. package/dist/types.d.ts +108 -0
  255. package/dist/types.d.ts.map +1 -0
  256. package/dist/types.js +17 -0
  257. package/dist/types.js.map +1 -0
  258. package/package.json +39 -0
package/dist/tools.js ADDED
@@ -0,0 +1,491 @@
1
+ /**
2
+ * MCP Tools for the Red Sift Design System.
3
+ *
4
+ * Provides search, lookup, usage, and code generation capabilities
5
+ * for AI assistants working with the design system.
6
+ */
7
+ import { z } from 'zod';
8
+ import { PACKAGE_DESCRIPTIONS, PACKAGES } from './types.js';
9
+ import { generateComponentScaffold } from './scaffold.js';
10
+ /**
11
+ * Format a prop type for display.
12
+ */
13
+ function formatPropType(type) {
14
+ if (Array.isArray(type)) {
15
+ return type.join(' | ');
16
+ }
17
+ return type;
18
+ }
19
+ /**
20
+ * Format props as a readable table.
21
+ */
22
+ function formatPropsTable(props, category) {
23
+ const filtered = category ? props.filter((p) => p.category === category) : props;
24
+ if (filtered.length === 0)
25
+ return '';
26
+ const lines = [
27
+ '| Prop | Type | Required | Default | Description |',
28
+ '|------|------|----------|---------|-------------|',
29
+ ];
30
+ for (const prop of filtered) {
31
+ const typeStr = formatPropType(prop.type);
32
+ const required = prop.required ? 'Yes' : 'No';
33
+ const defaultVal = prop.defaultValue ?? '-';
34
+ const desc = (prop.description || '').replace(/\n/g, ' ');
35
+ lines.push(`| ${prop.name} | ${typeStr} | ${required} | ${defaultVal} | ${desc} |`);
36
+ }
37
+ return lines.join('\n');
38
+ }
39
+ /**
40
+ * Register all MCP tools on the server.
41
+ */
42
+ export function registerTools(server, store, tokenStore, patternStore) {
43
+ // ─── search_components ───────────────────────────────────────────────
44
+ server.tool('search_components', 'Search for components by name, description, or keyword. Returns matching components with their package, description, and prop count.', {
45
+ query: z.string().describe('Search query — component name, keyword, or description fragment'),
46
+ package: z.string().optional().describe('Optional package filter (e.g. "design-system", "charts")'),
47
+ limit: z.number().int().min(1).max(50).optional().describe('Maximum results to return (default: 10)'),
48
+ }, async ({ query, package: pkg, limit }) => {
49
+ const maxResults = limit ?? 10;
50
+ const results = store.searchComponents(query, pkg).slice(0, maxResults);
51
+ if (results.length === 0) {
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: `No components found matching "${query}"${pkg ? ` in package ${pkg}` : ''}.`,
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ const lines = results.map((r) => `- **${r.name}** (${r.package}) — ${r.description || 'No description'} [${r.propsCount} props]`);
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: `Found ${results.length} component${results.length !== 1 ? 's' : ''}:\n\n${lines.join('\n')}\n\n---\n⚠️ **Call \`get_component_props\` before using any of these components.** Do not guess prop names or values — this design system has its own API that differs from MUI, Chakra, and other libraries.`,
67
+ },
68
+ ],
69
+ };
70
+ });
71
+ // ─── get_component_props ─────────────────────────────────────────────
72
+ server.tool('get_component_props', 'Get full prop documentation for a specific component, including types, defaults, and descriptions. Returns props grouped by category.', {
73
+ name: z.string().describe('Component name (PascalCase, e.g. "Button", "TextField")'),
74
+ package: z.string().optional().describe('Package name for disambiguation (e.g. "design-system")'),
75
+ }, async ({ name, package: pkg }) => {
76
+ const component = store.getComponent(name, pkg);
77
+ if (!component) {
78
+ // Try fuzzy search as fallback
79
+ const suggestions = store.searchComponents(name, pkg).slice(0, 5);
80
+ const suggestionText = suggestions.length > 0 ? `\n\nDid you mean: ${suggestions.map((s) => s.name).join(', ')}?` : '';
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: `Component "${name}" not found${pkg ? ` in package ${pkg}` : ''}.${suggestionText}`,
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ const mainProps = component.props.filter((p) => p.category === 'props');
91
+ const layoutProps = component.props.filter((p) => p.category === 'layout');
92
+ const spacingProps = component.props.filter((p) => p.category === 'spacing');
93
+ const sizingProps = component.props.filter((p) => p.category === 'sizing');
94
+ const positioningProps = component.props.filter((p) => p.category === 'positioning');
95
+ const sections = [];
96
+ sections.push(`# ${component.name}\n`);
97
+ if (component.description) {
98
+ sections.push(`${component.description}\n`);
99
+ }
100
+ sections.push(`**Package:** ${component.package}`);
101
+ sections.push(`**File:** ${component.filePath}`);
102
+ if (Object.keys(component.tags).length > 0) {
103
+ for (const [tag, value] of Object.entries(component.tags)) {
104
+ sections.push(`**@${tag}:** ${value}`);
105
+ }
106
+ }
107
+ sections.push('');
108
+ if (mainProps.length > 0) {
109
+ sections.push('## Props\n');
110
+ sections.push(formatPropsTable(mainProps));
111
+ sections.push('');
112
+ }
113
+ if (layoutProps.length > 0) {
114
+ sections.push(`## Layout Props (${layoutProps.length})\n\nInherited: ${layoutProps
115
+ .map((p) => `\`${p.name}\``)
116
+ .join(', ')}\n`);
117
+ }
118
+ if (spacingProps.length > 0) {
119
+ sections.push(`## Spacing Props (${spacingProps.length})\n\nInherited: ${spacingProps
120
+ .map((p) => `\`${p.name}\``)
121
+ .join(', ')}\n`);
122
+ }
123
+ if (sizingProps.length > 0) {
124
+ sections.push(`## Sizing Props (${sizingProps.length})\n\nInherited: ${sizingProps
125
+ .map((p) => `\`${p.name}\``)
126
+ .join(', ')}\n`);
127
+ }
128
+ if (positioningProps.length > 0) {
129
+ sections.push(`## Positioning Props (${positioningProps.length})\n\nInherited: ${positioningProps
130
+ .map((p) => `\`${p.name}\``)
131
+ .join(', ')}\n`);
132
+ }
133
+ if (component.examples.length > 0) {
134
+ sections.push('## Examples\n');
135
+ for (const example of component.examples) {
136
+ sections.push(example);
137
+ sections.push('');
138
+ }
139
+ }
140
+ sections.push('---');
141
+ sections.push('⚠️ **Only use the props listed above.** Do not add props like `size`, `colorScheme`, `isDisabled`, or `onPress` — they do not exist in this design system unless explicitly listed above. If a prop is not documented here, it is not supported.');
142
+ return {
143
+ content: [{ type: 'text', text: sections.join('\n') }],
144
+ };
145
+ });
146
+ // ─── get_component_usage ─────────────────────────────────────────────
147
+ server.tool('get_component_usage', 'Get the import statement and a minimal JSX usage example for a component.', {
148
+ name: z.string().describe('Component name (PascalCase)'),
149
+ package: z.string().optional().describe('Package name for disambiguation'),
150
+ }, async ({ name, package: pkg }) => {
151
+ const component = store.getComponent(name, pkg);
152
+ if (!component) {
153
+ return {
154
+ content: [{ type: 'text', text: `Component "${name}" not found.` }],
155
+ };
156
+ }
157
+ const importLine = `import { ${component.name} } from '${component.package}';`;
158
+ // Build example JSX using required props
159
+ const requiredProps = component.props.filter((p) => p.required && p.category === 'props');
160
+ const propsStr = requiredProps
161
+ .map((p) => {
162
+ const val = getExampleValue(p);
163
+ return `${p.name}={${val}}`;
164
+ })
165
+ .join(' ');
166
+ // Check if it's likely a self-closing component (no children prop or children not required)
167
+ const hasChildren = component.props.some((p) => p.name === 'children' && p.category === 'props');
168
+ let jsx;
169
+ if (hasChildren) {
170
+ jsx = propsStr
171
+ ? `<${component.name} ${propsStr}>\n Content\n</${component.name}>`
172
+ : `<${component.name}>\n Content\n</${component.name}>`;
173
+ }
174
+ else {
175
+ jsx = propsStr ? `<${component.name} ${propsStr} />` : `<${component.name} />`;
176
+ }
177
+ const lines = ['```tsx', importLine, '', '// Basic usage', jsx, '```'];
178
+ // Add variant examples if applicable
179
+ const variantProp = component.props.find((p) => p.name === 'variant' && Array.isArray(p.type));
180
+ if (variantProp && Array.isArray(variantProp.type)) {
181
+ lines.push('');
182
+ lines.push('**Available variants:**');
183
+ for (const v of variantProp.type) {
184
+ lines.push(`- ${v}`);
185
+ }
186
+ }
187
+ const sizeProp = component.props.find((p) => p.name === 'size' && Array.isArray(p.type));
188
+ if (sizeProp && Array.isArray(sizeProp.type)) {
189
+ lines.push('');
190
+ lines.push('**Available sizes:**');
191
+ for (const s of sizeProp.type) {
192
+ lines.push(`- ${s}`);
193
+ }
194
+ }
195
+ lines.push('');
196
+ lines.push('---');
197
+ lines.push('⚠️ **Use this exact import.** Do not guess the package — components live in specific `@redsift/*` packages. Importing from the wrong package will cause build errors.');
198
+ return {
199
+ content: [{ type: 'text', text: lines.join('\n') }],
200
+ };
201
+ });
202
+ // ─── list_packages ───────────────────────────────────────────────────
203
+ server.tool('list_packages', 'List all packages in the design system with their component counts and descriptions.', {}, async () => {
204
+ const packages = store.listPackages();
205
+ const lines = packages.map((p) => {
206
+ const desc = PACKAGE_DESCRIPTIONS[p.name] || '';
207
+ return `- **${p.fullName}** (${p.componentCount} components): ${desc}`;
208
+ });
209
+ const total = packages.reduce((sum, p) => sum + p.componentCount, 0);
210
+ return {
211
+ content: [
212
+ {
213
+ type: 'text',
214
+ text: `# Red Sift Design System Packages\n\nTotal: ${total} components across ${packages.length} packages\n\n${lines.join('\n')}`,
215
+ },
216
+ ],
217
+ };
218
+ });
219
+ // ─── generate_component_scaffold ─────────────────────────────────────
220
+ server.tool('generate_component_scaffold', 'Generate boilerplate files for a new component following the design system conventions. Returns file contents for: ComponentName.tsx, types.ts, styles.ts, index.ts, ComponentName.test.tsx, and ComponentName.stories.tsx.', {
221
+ name: z.string().describe('Component name in PascalCase (e.g. "StatusCard")'),
222
+ package: z.string().describe('Target package (e.g. "design-system", "charts")'),
223
+ element: z.string().optional().describe('HTML element to extend (default: "div"). E.g. "button", "input", "a"'),
224
+ description: z.string().optional().describe('Component description for JSDoc'),
225
+ props: z
226
+ .array(z.object({
227
+ name: z.string().describe('Prop name'),
228
+ type: z.string().describe('TypeScript type (e.g. "string", "boolean", "() => void")'),
229
+ required: z.boolean().optional().describe('Whether the prop is required'),
230
+ defaultValue: z.string().optional().describe('Default value'),
231
+ description: z.string().optional().describe('JSDoc description'),
232
+ }))
233
+ .optional()
234
+ .describe('Custom props to include'),
235
+ }, async ({ name, package: pkg, element, description, props }) => {
236
+ const files = generateComponentScaffold({
237
+ name,
238
+ packageName: pkg,
239
+ element: element || 'div',
240
+ description: description || `The ${name} component.`,
241
+ props: props || [],
242
+ });
243
+ const sections = files.map((f) => `### ${f.fileName}\n\n\`\`\`${f.language}\n${f.content}\n\`\`\``);
244
+ return {
245
+ content: [
246
+ {
247
+ type: 'text',
248
+ text: `# Generated scaffold for ${name}\n\n**Package:** @redsift/${pkg}\n**Directory:** packages/${pkg}/src/components/${toKebabCase(name)}/\n\n${sections.join('\n\n')}`,
249
+ },
250
+ ],
251
+ };
252
+ });
253
+ // ─── search_design_tokens ────────────────────────────────────────────
254
+ server.tool('search_design_tokens', 'Search for design tokens (colors, typography, spacing, z-index) by name, value, or CSS variable. Returns matching tokens with their values and CSS variable names.', {
255
+ query: z
256
+ .string()
257
+ .describe('Search query — token name, color name, hex value, or CSS variable fragment (e.g. "blue", "#4285f4", "button", "font-size")'),
258
+ category: z
259
+ .string()
260
+ .optional()
261
+ .describe('Filter by category: "color", "typography", "layout", "border-radius", "component"'),
262
+ limit: z.number().int().min(1).max(100).optional().describe('Maximum results (default: 20)'),
263
+ }, async ({ query, category, limit }) => {
264
+ const maxResults = limit ?? 20;
265
+ const results = tokenStore.searchTokens(query, category).slice(0, maxResults);
266
+ if (results.length === 0) {
267
+ const categories = tokenStore.getCategories();
268
+ return {
269
+ content: [
270
+ {
271
+ type: 'text',
272
+ text: `No tokens found matching "${query}"${category ? ` in category "${category}"` : ''}.\n\nAvailable categories: ${categories.join(', ')}`,
273
+ },
274
+ ],
275
+ };
276
+ }
277
+ const lines = results.map((t) => formatToken(t));
278
+ return {
279
+ content: [
280
+ {
281
+ type: 'text',
282
+ text: `Found ${results.length} token${results.length !== 1 ? 's' : ''}:\n\n${lines.join('\n')}`,
283
+ },
284
+ ],
285
+ };
286
+ });
287
+ // ─── get_design_tokens ───────────────────────────────────────────────
288
+ server.tool('get_design_tokens', 'Get all design tokens for a specific category (color, typography, layout, border-radius, component). Returns the full list of tokens with their values and CSS variables.', {
289
+ category: z.string().describe('Token category: "color", "typography", "layout", "border-radius", or "component"'),
290
+ }, async ({ category }) => {
291
+ const tokens = tokenStore.getTokensByCategory(category);
292
+ if (tokens.length === 0) {
293
+ const categories = tokenStore.getCategories();
294
+ return {
295
+ content: [
296
+ {
297
+ type: 'text',
298
+ text: `Category "${category}" not found.\n\nAvailable categories: ${categories.join(', ')}`,
299
+ },
300
+ ],
301
+ };
302
+ }
303
+ // Group tokens by their top-level name segment
304
+ const groups = new Map();
305
+ for (const token of tokens) {
306
+ const topLevel = token.name.split('.').slice(0, 2).join('.');
307
+ const existing = groups.get(topLevel) || [];
308
+ existing.push(token);
309
+ groups.set(topLevel, existing);
310
+ }
311
+ const sections = [`# Design Tokens — ${category}\n`, `Total: ${tokens.length} tokens\n`];
312
+ for (const [group, groupTokens] of groups) {
313
+ sections.push(`## ${group}\n`);
314
+ sections.push('| Token | Value | CSS Variable |');
315
+ sections.push('|-------|-------|-------------|');
316
+ for (const t of groupTokens) {
317
+ const value = t.isReference ? `${t.value} (ref: ${t.rawValue})` : t.value;
318
+ sections.push(`| ${t.name} | ${value} | ${t.cssVariable ? `\`${t.cssVariable}\`` : '-'} |`);
319
+ }
320
+ sections.push('');
321
+ }
322
+ return {
323
+ content: [{ type: 'text', text: sections.join('\n') }],
324
+ };
325
+ });
326
+ // ─── get_css_variables ───────────────────────────────────────────────
327
+ server.tool('get_css_variables', 'Find CSS custom properties (variables) used in the design system. Search by component name or token type to find the exact var() values to use in styles.', {
328
+ pattern: z
329
+ .string()
330
+ .describe('Pattern to match in CSS variable names (e.g. "button", "tooltip-background", "dark-components-alert")'),
331
+ limit: z.number().int().min(1).max(200).optional().describe('Maximum results (default: 50)'),
332
+ }, async ({ pattern, limit }) => {
333
+ const maxResults = limit ?? 50;
334
+ const results = tokenStore.getCssVariablesByPattern(pattern).slice(0, maxResults);
335
+ if (results.length === 0) {
336
+ return {
337
+ content: [
338
+ {
339
+ type: 'text',
340
+ text: `No CSS variables matching "${pattern}". Try a broader pattern like "button" or "color".`,
341
+ },
342
+ ],
343
+ };
344
+ }
345
+ const lines = results.map((v) => `\`${v.name}\`: ${v.value}`);
346
+ return {
347
+ content: [
348
+ {
349
+ type: 'text',
350
+ text: `Found ${results.length} CSS variable${results.length !== 1 ? 's' : ''} matching "${pattern}":\n\n${lines.join('\n')}`,
351
+ },
352
+ ],
353
+ };
354
+ });
355
+ // ─── update_changelog ────────────────────────────────────────────────
356
+ server.tool('update_changelog', 'Generate a properly formatted CHANGELOG.md entry for the [Unreleased] section. Returns the formatted entry text to insert — does not modify the file directly.', {
357
+ type: z.enum(['Added', 'Changed', 'Fixed', 'Removed', 'Deprecated']).describe('Change type'),
358
+ package: z.enum(PACKAGES).optional().describe('Affected package (omit for repo-wide changes)'),
359
+ description: z.string().describe('Description of the change'),
360
+ }, async ({ type, package: pkg, description }) => {
361
+ const prefix = pkg ? `\`@redsift/${pkg}\`: ` : '';
362
+ const entry = `- ${prefix}${description}`;
363
+ return {
364
+ content: [
365
+ {
366
+ type: 'text',
367
+ text: `Add the following line to \`CHANGELOG.md\` under \`## [Unreleased]\` → \`### ${type}\`:
368
+
369
+ \`\`\`markdown
370
+ ${entry}
371
+ \`\`\`
372
+
373
+ If the \`### ${type}\` section doesn't exist under \`[Unreleased]\`, create it. The sections should appear in this order: Added, Changed, Fixed, Removed, Deprecated.
374
+
375
+ **Full path:** CHANGELOG.md`,
376
+ },
377
+ ],
378
+ };
379
+ });
380
+ // ─── search_patterns ────────────────────────────────────────────────
381
+ server.tool('search_patterns', 'Search for composition patterns — proven component groupings for common UI scenarios like data tables, modals, dashboards, and forms. Returns matching patterns with their components, layout, and documentation link.', {
382
+ query: z
383
+ .string()
384
+ .describe('Search query — pattern name, component name, tag, or UI concept (e.g. "table", "modal", "form", "dashboard")'),
385
+ limit: z.number().int().min(1).max(21).optional().describe('Maximum results to return (default: 10)'),
386
+ }, async ({ query, limit }) => {
387
+ const results = patternStore.searchPatterns(query, limit);
388
+ if (results.length === 0) {
389
+ return {
390
+ content: [
391
+ {
392
+ type: 'text',
393
+ text: `No patterns found matching "${query}". Try broader terms like "table", "form", "modal", "card", or "navigation".`,
394
+ },
395
+ ],
396
+ };
397
+ }
398
+ const lines = results.map((p) => {
399
+ const components = p.components.join(', ');
400
+ const packages = p.packages.join(', ');
401
+ const sections = [
402
+ `### ${p.name}`,
403
+ `- **Slug:** ${p.slug}`,
404
+ `- **Description:** ${p.description}`,
405
+ `- **Components:** ${components}`,
406
+ `- **Packages:** ${packages}`,
407
+ `- **Layout:** ${p.layout}`,
408
+ `- **Tags:** ${p.tags.join(', ')}`,
409
+ ];
410
+ // Include When to Use for quick pattern evaluation
411
+ if (p.whenToUse && p.whenToUse.length > 0) {
412
+ sections.push('- **When to use:**');
413
+ for (const item of p.whenToUse) {
414
+ sections.push(` - ${item}`);
415
+ }
416
+ }
417
+ // Include required features summary
418
+ if (p.features && p.features.length > 0) {
419
+ const required = p.features.filter((f) => f.required).map((f) => f.name);
420
+ const optional = p.features.filter((f) => !f.required).map((f) => f.name);
421
+ if (required.length > 0) {
422
+ sections.push(`- **Required features:** ${required.join(', ')}`);
423
+ }
424
+ if (optional.length > 0) {
425
+ sections.push(`- **Optional features:** ${optional.join(', ')}`);
426
+ }
427
+ }
428
+ sections.push(`- **Docs:** https://design-system.redsift.io/patterns/${p.slug}`);
429
+ sections.push(`- **Resource:** \`design-system://patterns/${p.slug}\` — fetch this resource to get the full spec, implementation checklist, and demo source code`);
430
+ return sections.join('\n');
431
+ });
432
+ return {
433
+ content: [
434
+ {
435
+ type: 'text',
436
+ text: `Found ${results.length} pattern(s) matching "${query}":\n\n${lines.join('\n\n')}\n\n---\n⚠️ **Fetch the full pattern resource** (\`design-system://patterns/{slug}\`) before implementing. It contains the complete working code, state management hooks, and implementation checklist. Do not guess the composition — use the proven pattern.`,
437
+ },
438
+ ],
439
+ };
440
+ });
441
+ }
442
+ /**
443
+ * Format a design token for display.
444
+ */
445
+ function formatToken(token) {
446
+ const parts = [`- **${token.name}**: ${token.value}`];
447
+ if (token.cssVariable) {
448
+ parts.push(` CSS: \`var(${token.cssVariable})\``);
449
+ }
450
+ if (token.isReference && token.rawValue) {
451
+ parts.push(` (ref: ${token.rawValue})`);
452
+ }
453
+ parts.push(` [${token.category}]`);
454
+ return parts.join(' ·');
455
+ }
456
+ /**
457
+ * Generate a reasonable example value for a prop based on its type.
458
+ */
459
+ function getExampleValue(prop) {
460
+ const type = Array.isArray(prop.type) ? prop.type[0] : prop.type;
461
+ if (prop.defaultValue)
462
+ return JSON.stringify(prop.defaultValue);
463
+ switch (type) {
464
+ case 'string':
465
+ return `"${prop.name}"`;
466
+ case 'number':
467
+ return '0';
468
+ case 'boolean':
469
+ case 'true':
470
+ case 'false':
471
+ return 'true';
472
+ default:
473
+ if (type.startsWith('"') || type.startsWith("'")) {
474
+ return type; // It's a string literal
475
+ }
476
+ if (type.includes('=>') || type.includes('Function')) {
477
+ return '() => {}';
478
+ }
479
+ return `undefined /* ${type} */`;
480
+ }
481
+ }
482
+ /**
483
+ * Convert PascalCase to kebab-case.
484
+ */
485
+ function toKebabCase(str) {
486
+ return str
487
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
488
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
489
+ .toLowerCase();
490
+ }
491
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Type definitions for the MCP server data layer.
3
+ * These mirror the structures generated by scripts/extract-component-docs.ts.
4
+ */
5
+ /** A single extracted prop from a component */
6
+ export interface ComponentProp {
7
+ name: string;
8
+ description: string;
9
+ type: string | string[];
10
+ required: boolean;
11
+ defaultValue: string | null;
12
+ category?: 'props' | 'layout' | 'spacing' | 'sizing' | 'positioning';
13
+ }
14
+ /** Full component documentation */
15
+ export interface ComponentDoc {
16
+ name: string;
17
+ description: string;
18
+ package: string;
19
+ filePath: string;
20
+ props: ComponentProp[];
21
+ examples: string[];
22
+ tags: Record<string, string>;
23
+ }
24
+ /** Lightweight component index entry */
25
+ export interface ComponentIndexEntry {
26
+ name: string;
27
+ package: string;
28
+ description: string;
29
+ propsCount: number;
30
+ hasExamples: boolean;
31
+ }
32
+ /** Package entry in components.json */
33
+ export interface PackageEntry {
34
+ name: string;
35
+ components: ComponentDoc[];
36
+ }
37
+ /** Full components.json structure */
38
+ export interface ComponentsJson {
39
+ $schema: string;
40
+ name: string;
41
+ version: string;
42
+ generated: string;
43
+ repository: string;
44
+ documentation: string;
45
+ packages: PackageEntry[];
46
+ summary: {
47
+ totalPackages: number;
48
+ totalComponents: number;
49
+ componentsByPackage: Record<string, number>;
50
+ };
51
+ }
52
+ /** Supported package names */
53
+ export declare const PACKAGES: readonly ["design-system", "popovers", "pickers", "charts", "table", "dashboard", "products"];
54
+ export type PackageName = (typeof PACKAGES)[number];
55
+ /** Package descriptions for display */
56
+ export declare const PACKAGE_DESCRIPTIONS: Record<string, string>;
57
+ /** Composition pattern entry from patterns.json */
58
+ export interface Pattern {
59
+ name: string;
60
+ slug: string;
61
+ description: string;
62
+ components: string[];
63
+ packages: string[];
64
+ layout: string;
65
+ tags: string[];
66
+ demoPath?: string;
67
+ whenToUse?: string[];
68
+ whenNotToUse?: string[];
69
+ anatomy?: string[];
70
+ features?: PatternFeature[];
71
+ stateHooks?: PatternStateHook[];
72
+ dataContract?: string;
73
+ implementationSteps?: string[];
74
+ variants?: PatternVariant[];
75
+ accessibility?: string[];
76
+ relatedPatterns?: PatternRelation[];
77
+ }
78
+ /** A feature in a pattern's feature table */
79
+ export interface PatternFeature {
80
+ name: string;
81
+ required: boolean;
82
+ description: string;
83
+ }
84
+ /** A state hook used in a pattern */
85
+ export interface PatternStateHook {
86
+ name: string;
87
+ type: string;
88
+ initial: string;
89
+ description: string;
90
+ }
91
+ /** A variant demo for a pattern */
92
+ export interface PatternVariant {
93
+ name: string;
94
+ slug: string;
95
+ description: string;
96
+ }
97
+ /** A related pattern cross-link */
98
+ export interface PatternRelation {
99
+ slug: string;
100
+ relationship: string;
101
+ }
102
+ /** Pattern with loaded demo source code (main + variants) */
103
+ export interface PatternWithDemo extends Pattern {
104
+ demoSource?: string;
105
+ variantSources?: Record<string, string>;
106
+ mdxSource?: string;
107
+ }
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Type definitions for the MCP server data layer.
3
+ * These mirror the structures generated by scripts/extract-component-docs.ts.
4
+ */
5
+ /** Supported package names */
6
+ export const PACKAGES = ['design-system', 'popovers', 'pickers', 'charts', 'table', 'dashboard', 'products'];
7
+ /** Package descriptions for display */
8
+ export const PACKAGE_DESCRIPTIONS = {
9
+ 'design-system': 'Core UI components (buttons, forms, navigation, layout)',
10
+ popovers: 'Popover, tooltip, dialog, and toast components',
11
+ pickers: 'Selection components (combobox, menu button, select)',
12
+ charts: 'D3.js-based chart components (bar, line, pie, scatter)',
13
+ table: 'DataGrid components built on MUI X Data Grid',
14
+ dashboard: 'Dashboard components with crossfilter integration',
15
+ products: 'Product-specific component implementations',
16
+ };
17
+ //# sourceMappingURL=types.js.map