@wizeworks/silicaui-mcp 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/components.json +6 -0
- package/dist/data/packages.json +10 -10
- package/dist/data/tokens.json +102 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -2509,6 +2509,12 @@
|
|
|
2509
2509
|
"type": "string",
|
|
2510
2510
|
"doc": "Class for the popup surface."
|
|
2511
2511
|
},
|
|
2512
|
+
{
|
|
2513
|
+
"name": "popupProps",
|
|
2514
|
+
"optional": true,
|
|
2515
|
+
"type": "React.ComponentProps<typeof BaseCombobox.Popup> & {\r\n \"data-theme\"?: string;\r\n }",
|
|
2516
|
+
"doc": "Extra props spread onto the popup surface — a portaled popup renders at document.body, OUTSIDE any `[data-theme]` island it was opened from, so a host with a scoped theme (e.g. a builder chrome) should pass `popupProps={{ \"data-theme\": \"…\" }}` to re-establish the theme tokens on the popup's own root (mirrors `Select`'s `popupProps`)."
|
|
2517
|
+
},
|
|
2512
2518
|
{
|
|
2513
2519
|
"name": "itemToStringLabel",
|
|
2514
2520
|
"optional": true,
|
package/dist/data/packages.json
CHANGED
|
@@ -3,60 +3,60 @@
|
|
|
3
3
|
"name": "@wizeworks/silicaui",
|
|
4
4
|
"purpose": "Tailwind v4 plugin — design tokens + component CSS classes (the vocabulary every other package builds on).",
|
|
5
5
|
"install": "pnpm add -D @wizeworks/silicaui tailwindcss",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.18.0"
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
9
|
"name": "@wizeworks/silicaui-react",
|
|
10
10
|
"purpose": "Typed React components over the @wizeworks/silicaui classes, built on Base UI.",
|
|
11
11
|
"install": "pnpm add @wizeworks/silicaui-react",
|
|
12
|
-
"version": "0.
|
|
12
|
+
"version": "0.18.0"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "@wizeworks/silicaui-html",
|
|
16
16
|
"purpose": "Framework-neutral node-tree schema + HTML projection + composed blocks (for non-React output).",
|
|
17
17
|
"install": "pnpm add @wizeworks/silicaui-html",
|
|
18
|
-
"version": "0.
|
|
18
|
+
"version": "0.18.0"
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"name": "@wizeworks/silicaui-behaviors",
|
|
22
22
|
"purpose": "Zero-dependency runtime that hydrates data-sui-* markers with interactivity (the vanilla-JS counterpart to @wizeworks/silicaui-react's Base UI behavior).",
|
|
23
23
|
"install": "pnpm add @wizeworks/silicaui-behaviors",
|
|
24
|
-
"version": "0.
|
|
24
|
+
"version": "0.18.0"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"name": "@wizeworks/silicaui-builder",
|
|
28
28
|
"purpose": "The visual document editor/engine that powers the SilicaUI sitebuilder — also consumable directly: the framework-neutral engine at the root import, the `Builder` React component + `BuilderHost` interface (catalog/inspectorPanels/pickAsset) at `/react`, and the email editor at `/email` and `/email/react`.",
|
|
29
29
|
"install": "pnpm add @wizeworks/silicaui-builder @wizeworks/silicaui-react",
|
|
30
|
-
"version": "0.
|
|
30
|
+
"version": "0.18.0"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"name": "@wizeworks/silicaui-charts",
|
|
34
34
|
"purpose": "Apache ECharts wrapped and auto-themed to Silica's design tokens.",
|
|
35
35
|
"install": "pnpm add @wizeworks/silicaui-charts @wizeworks/silicaui-react",
|
|
36
|
-
"version": "0.
|
|
36
|
+
"version": "0.18.0"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"name": "@wizeworks/silicaui-table",
|
|
40
40
|
"purpose": "TanStack Table wrapped in Silica's table CSS.",
|
|
41
41
|
"install": "pnpm add @wizeworks/silicaui-table @wizeworks/silicaui-react",
|
|
42
|
-
"version": "0.
|
|
42
|
+
"version": "0.18.0"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
"name": "@wizeworks/silicaui-editor",
|
|
46
46
|
"purpose": "TipTap rich-text editor with a Silica-styled toolbar.",
|
|
47
47
|
"install": "pnpm add @wizeworks/silicaui-editor @wizeworks/silicaui-react",
|
|
48
|
-
"version": "0.
|
|
48
|
+
"version": "0.18.0"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"name": "@wizeworks/silicaui-dnd",
|
|
52
52
|
"purpose": "dnd-kit wrapped — SortableList + drag primitives.",
|
|
53
53
|
"install": "pnpm add @wizeworks/silicaui-dnd @wizeworks/silicaui-react",
|
|
54
|
-
"version": "0.
|
|
54
|
+
"version": "0.18.0"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"name": "@wizeworks/silicaui-panels",
|
|
58
58
|
"purpose": "react-resizable-panels wrapped in Silica styling.",
|
|
59
59
|
"install": "pnpm add @wizeworks/silicaui-panels @wizeworks/silicaui-react",
|
|
60
|
-
"version": "0.
|
|
60
|
+
"version": "0.18.0"
|
|
61
61
|
}
|
|
62
62
|
]
|
package/dist/data/tokens.json
CHANGED
|
@@ -53,6 +53,107 @@
|
|
|
53
53
|
"error": "oklch(66% 0.18 25)",
|
|
54
54
|
"error-content": "oklch(14% 0.03 25)"
|
|
55
55
|
},
|
|
56
|
+
"scalarTokens": [
|
|
57
|
+
{
|
|
58
|
+
"key": "--radius-selector",
|
|
59
|
+
"label": "Selector radius",
|
|
60
|
+
"group": "radius",
|
|
61
|
+
"default": "1rem",
|
|
62
|
+
"unit": "rem",
|
|
63
|
+
"min": 0,
|
|
64
|
+
"max": 2,
|
|
65
|
+
"step": 0.05,
|
|
66
|
+
"doc": "Corner radius for round selector controls (Radio, Checkbox, Switch, Toggle)."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"key": "--radius-field",
|
|
70
|
+
"label": "Field radius",
|
|
71
|
+
"group": "radius",
|
|
72
|
+
"default": "0.25rem",
|
|
73
|
+
"unit": "rem",
|
|
74
|
+
"min": 0,
|
|
75
|
+
"max": 2,
|
|
76
|
+
"step": 0.05,
|
|
77
|
+
"doc": "Corner radius for form fields — Input, Select, Textarea, Button, etc."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"key": "--radius-box",
|
|
81
|
+
"label": "Box radius",
|
|
82
|
+
"group": "radius",
|
|
83
|
+
"default": "0.5rem",
|
|
84
|
+
"unit": "rem",
|
|
85
|
+
"min": 0,
|
|
86
|
+
"max": 2,
|
|
87
|
+
"step": 0.05,
|
|
88
|
+
"doc": "Corner radius for box-tier surfaces — Card, Dialog, Popover, Dropdown, and similar containers."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"key": "--border",
|
|
92
|
+
"label": "Border width",
|
|
93
|
+
"group": "form",
|
|
94
|
+
"default": "1px",
|
|
95
|
+
"unit": "px",
|
|
96
|
+
"min": 0,
|
|
97
|
+
"max": 4,
|
|
98
|
+
"step": 0.5,
|
|
99
|
+
"doc": "Hairline border width shared by fields and box surfaces (Input, Card, etc.)."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"key": "--size-field",
|
|
103
|
+
"label": "Field size",
|
|
104
|
+
"group": "form",
|
|
105
|
+
"default": "0.25rem",
|
|
106
|
+
"unit": "rem",
|
|
107
|
+
"min": 0.15,
|
|
108
|
+
"max": 0.4,
|
|
109
|
+
"step": 0.01,
|
|
110
|
+
"doc": "Base unit fields scale their height/padding from — raising it enlarges Input/Select/Button uniformly."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"key": "--depth",
|
|
114
|
+
"label": "Depth",
|
|
115
|
+
"group": "effects",
|
|
116
|
+
"default": "1",
|
|
117
|
+
"unit": "",
|
|
118
|
+
"min": 0,
|
|
119
|
+
"max": 1,
|
|
120
|
+
"step": 1,
|
|
121
|
+
"doc": "Shadow intensity on Card (resting + hover-lift box-shadow) and Button (inset highlight + drop shadow on solid fills). Set to 0 for fully flat surfaces — no per-component shadow-none needed."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"key": "--noise",
|
|
125
|
+
"label": "Noise",
|
|
126
|
+
"group": "effects",
|
|
127
|
+
"default": "0",
|
|
128
|
+
"unit": "",
|
|
129
|
+
"min": 0,
|
|
130
|
+
"max": 1,
|
|
131
|
+
"step": 1,
|
|
132
|
+
"doc": "Reserved for a grain/noise surface texture. Not yet wired into any component's CSS — currently has no visible effect."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"key": "--focus-width",
|
|
136
|
+
"label": "Focus ring width",
|
|
137
|
+
"group": "effects",
|
|
138
|
+
"default": "2px",
|
|
139
|
+
"unit": "px",
|
|
140
|
+
"min": 0,
|
|
141
|
+
"max": 6,
|
|
142
|
+
"step": 0.5,
|
|
143
|
+
"doc": "Outline width of the keyboard focus ring across interactive components."
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"key": "--disabled-opacity",
|
|
147
|
+
"label": "Disabled opacity",
|
|
148
|
+
"group": "effects",
|
|
149
|
+
"default": "0.5",
|
|
150
|
+
"unit": "",
|
|
151
|
+
"min": 0.2,
|
|
152
|
+
"max": 1,
|
|
153
|
+
"step": 0.05,
|
|
154
|
+
"doc": "Opacity applied to disabled controls."
|
|
155
|
+
}
|
|
156
|
+
],
|
|
56
157
|
"typography": {
|
|
57
158
|
"baseFontSize": "100% (≈16px) — an explicit anchor, not the UA default by accident; the whole rem-based type scale (text-md = 1rem) scales with it.",
|
|
58
159
|
"fontFamilyTokens": [
|
|
@@ -60,6 +161,6 @@
|
|
|
60
161
|
"--font-serif",
|
|
61
162
|
"--font-mono"
|
|
62
163
|
],
|
|
63
|
-
"note": "Every non-namespace token (
|
|
164
|
+
"note": "Every non-namespace token (see scalarTokens above, plus --duration, --ease, --focus-offset which aren't yet theme-editable) carries its default inline via var(--token, default) in each component, so an app's own :root/@theme override always wins."
|
|
64
165
|
}
|
|
65
166
|
}
|
package/dist/server.js
CHANGED
|
@@ -131,7 +131,7 @@ function createServer() {
|
|
|
131
131
|
"get_tokens",
|
|
132
132
|
{
|
|
133
133
|
title: "Get Silica UI design tokens",
|
|
134
|
-
description: "Get the semantic color list and their light/dark OKLCH values,
|
|
134
|
+
description: "Get the semantic color list and their light/dark OKLCH values, the typography token model, and the scalar theme tokens (radius/border/depth/noise/focus/disabled-opacity) with defaults, ranges, and what each one actually affects.",
|
|
135
135
|
inputSchema: {}
|
|
136
136
|
},
|
|
137
137
|
async () => ({ content: [{ type: "text", text: JSON.stringify(tokens, null, 2) }] })
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { z } from \"zod\";\n\nconst here = path.dirname(fileURLToPath(import.meta.url));\nconst dataDir = path.join(here, \"data\");\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(path.join(dataDir, `${name}.json`), \"utf8\")) as T;\n}\n\ninterface PackageMeta {\n name: string;\n purpose: string;\n install: string | null;\n private?: boolean;\n version: string;\n}\n\ninterface TokensData {\n semanticColors: string[];\n light: Record<string, string>;\n dark: Record<string, string>;\n typography: { baseFontSize: string; fontFamilyTokens: string[]; note: string };\n}\n\ninterface PropMember {\n name: string;\n optional: boolean;\n type: string;\n doc: string;\n}\n\ninterface PropsInterface {\n name: string;\n extends?: string;\n members: PropMember[];\n}\n\ninterface ComponentData {\n name: string;\n package: string;\n category: string;\n sourceFile: string;\n /** silicaui-react entries: extracted from source via TS AST. silicaui-html\n * macros carry no static description (never hand-authored — see label/icon\n * instead) and omit these two fields. */\n description?: string;\n props?: PropsInterface[];\n usageExample?: string | null;\n /** silicaui-html macros only: palette label/icon, whether it's a container,\n * and the BehaviorType(s) its expansion carries (found by actually calling\n * expand(), not guessed — see get_behavior for the marker contract). */\n label?: string;\n icon?: string;\n container?: boolean;\n behaviors?: string[];\n}\n\ninterface BlockSlot {\n name: string;\n [key: string]: unknown;\n}\n\ninterface BlockData {\n key: string;\n name: string;\n category: string;\n version: string;\n description: string;\n tags?: string[];\n colors: string[];\n behaviors: string[];\n emailEligible: boolean;\n slots: BlockSlot[];\n root: unknown;\n preview?: unknown;\n}\n\ninterface BehaviorData {\n type: string;\n description: string;\n}\n\nconst packages = loadJson<PackageMeta[]>(\"packages\");\nconst tokens = loadJson<TokensData>(\"tokens\");\nconst classesByComponent = loadJson<Record<string, string[]>>(\"classes\");\nconst blocks = loadJson<BlockData[]>(\"blocks\");\nconst behaviors = loadJson<BehaviorData[]>(\"behaviors\");\nconst components = loadJson<ComponentData[]>(\"components\");\n\nfunction toKebab(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n\nfunction blockSummary(b: BlockData) {\n const { root: _root, ...summary } = b;\n return summary;\n}\n\nexport function createServer(): McpServer {\n const server = new McpServer({\n name: \"@wizeworks/silicaui-mcp\",\n version: \"0.1.0\",\n });\n\n server.registerTool(\n \"list_packages\",\n {\n title: \"List Silica UI packages\",\n description:\n \"List every package in the Silica UI family (@wizeworks/silicaui, @wizeworks/silicaui-react, @wizeworks/silicaui-html, @wizeworks/silicaui-behaviors, and the wrapper packages), with purpose, install command, and version.\",\n inputSchema: {},\n },\n async () => ({\n content: [{ type: \"text\", text: JSON.stringify(packages, null, 2) }],\n }),\n );\n\n server.registerTool(\n \"list_components\",\n {\n title: \"List Silica UI components\",\n description:\n \"List component names, categories, and source packages — spans BOTH @wizeworks/silicaui-react (typed React components) and @wizeworks/silicaui-html (the framework-neutral ComponentDef macros: Dialog, Popover, Combobox, etc., for non-React output). The same name can exist in both packages with different shapes; use get_component's package param to disambiguate. Optionally filter to one package (e.g. '@wizeworks/silicaui-react', '@wizeworks/silicaui-html', '@wizeworks/silicaui-charts').\",\n inputSchema: {\n package: z.string().optional().describe(\"Filter to one package name, e.g. '@wizeworks/silicaui-react'.\"),\n },\n },\n async ({ package: pkg }) => {\n const filtered = pkg ? components.filter((c) => c.package === pkg) : components;\n const summary = filtered.map(({ name, package: p, category, sourceFile }) => ({\n name,\n package: p,\n category,\n sourceFile,\n }));\n return { content: [{ type: \"text\", text: JSON.stringify(summary, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_component\",\n {\n title: \"Get a Silica UI component's real shape\",\n description:\n \"Get a component's real definition — for @wizeworks/silicaui-react: props (name, type, optional, doc — extracted from its actual TypeScript source) and a real, working usage example from the playground demos; for @wizeworks/silicaui-html: its palette category/label/icon, whether it's a container, and the BehaviorType(s) it carries (cross-reference with get_behavior for the marker contract). Use this instead of guessing prop names or shapes. Pass package when a name exists in more than one package.\",\n inputSchema: {\n name: z.string().describe(\"Component name, e.g. 'Button', 'DataTable', 'Dialog'.\"),\n package: z.string().optional().describe(\"Disambiguate when the name exists in more than one package, e.g. '@wizeworks/silicaui-html'.\"),\n },\n },\n async ({ name, package: pkg }) => {\n let matches = components.filter((c) => c.name.toLowerCase() === name.toLowerCase());\n if (pkg) matches = matches.filter((c) => c.package === pkg);\n if (!matches.length) {\n return {\n content: [\n {\n type: \"text\",\n text: `No component named \"${name}\"${pkg ? ` in ${pkg}` : \"\"}. Call list_components to see valid names.`,\n },\n ],\n isError: true,\n };\n }\n if (matches.length > 1) {\n return {\n content: [\n {\n type: \"text\",\n text: `\"${name}\" exists in more than one package — pass package to disambiguate: ${matches.map((c) => c.package).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(matches[0], null, 2) }] };\n },\n );\n\n server.registerTool(\n \"list_classes\",\n {\n title: \"List real Silica UI CSS class names\",\n description:\n \"List the exact, literal CSS class names Silica UI generates for a core component (e.g. 'button', 'card', 'badge') — or all components if none given. These are extracted directly from the class generators, so they are never hallucinated. Also covers 'color-utilities' (text-*/bg-*/border-* for every declared color).\",\n inputSchema: {\n component: z\n .string()\n .optional()\n .describe(\"A core @wizeworks/silicaui component name, e.g. 'button'. Omit to list every component's classes.\"),\n },\n },\n async ({ component }) => {\n if (!component) {\n return { content: [{ type: \"text\", text: JSON.stringify(classesByComponent, null, 2) }] };\n }\n const key = toKebab(component);\n const classes = classesByComponent[key];\n if (!classes) {\n return {\n content: [\n {\n type: \"text\",\n text: `No class data for \"${component}\". Known components: ${Object.keys(classesByComponent).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify({ component: key, classes }, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_tokens\",\n {\n title: \"Get Silica UI design tokens\",\n description:\n \"Get the semantic color list and their light/dark OKLCH values, plus the typography token model.\",\n inputSchema: {},\n },\n async () => ({ content: [{ type: \"text\", text: JSON.stringify(tokens, null, 2) }] }),\n );\n\n server.registerTool(\n \"list_blocks\",\n {\n title: \"List Silica UI composed blocks\",\n description:\n \"List composed page blocks from @wizeworks/silicaui-html (hero sections, FAQs, feature grids, …) without their full node tree. Optionally filter by category or tag.\",\n inputSchema: {\n category: z.string().optional(),\n tag: z.string().optional(),\n },\n },\n async ({ category, tag }) => {\n const filtered = blocks.filter(\n (b) => (!category || b.category === category) && (!tag || (b.tags ?? []).includes(tag)),\n );\n return { content: [{ type: \"text\", text: JSON.stringify(filtered.map(blockSummary), null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_block\",\n {\n title: \"Get a Silica UI block's full node tree\",\n description:\n \"Get one composed block's full definition, including its node tree — the real, validated structure to reuse or adapt, not a guess.\",\n inputSchema: {\n key: z.string().describe(\"The block's stable key, e.g. 'hero_split_cta'.\"),\n },\n },\n async ({ key }) => {\n const block = blocks.find((b) => b.key === key);\n if (!block) {\n return {\n content: [\n {\n type: \"text\",\n text: `No block \"${key}\". Known keys: ${blocks.map((b) => b.key).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(block, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"list_behaviors\",\n {\n title: \"List Silica UI behavior types\",\n description:\n \"List the closed set of interactive behaviors that @wizeworks/silicaui-behaviors hydrates from data-sui-* markers (the vanilla-JS runtime for non-React output). Each type is also the BehaviorType a @wizeworks/silicaui-html ComponentDef macro carries — cross-reference with get_component. Call this to see the current set rather than assuming a fixed list; it grows over time.\",\n inputSchema: {},\n },\n async () => ({ content: [{ type: \"text\", text: JSON.stringify(behaviors, null, 2) }] }),\n );\n\n server.registerTool(\n \"get_behavior\",\n {\n title: \"Get one Silica UI behavior's contract\",\n description: \"Get the marker contract and semantics for one behavior type.\",\n inputSchema: {\n type: z.string().describe(\"Behavior type, e.g. 'disclosure'.\"),\n },\n },\n async ({ type }) => {\n const behavior = behaviors.find((b) => b.type === type);\n if (!behavior) {\n return {\n content: [\n {\n type: \"text\",\n text: `No behavior \"${type}\". Known types: ${behaviors.map((b) => b.type).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(behavior, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"search_docs\",\n {\n title: \"Search Silica UI catalog data\",\n description:\n \"Full-text search across everything this server knows: component names/descriptions, block names/descriptions, behavior descriptions, literal CSS class names, and design tokens. Use this when you don't know the exact name to look up.\",\n inputSchema: {\n query: z.string().describe(\"Search term, case-insensitive.\"),\n },\n },\n async ({ query }) => {\n const q = query.toLowerCase();\n const matchedComponents = components\n .filter((c) => c.name.toLowerCase().includes(q) || (c.description ?? \"\").toLowerCase().includes(q) || (c.label ?? \"\").toLowerCase().includes(q))\n .map((c) => ({ kind: \"component\", name: c.name, package: c.package }));\n const matchedBlocks = blocks\n .filter((b) => b.name.toLowerCase().includes(q) || b.description.toLowerCase().includes(q))\n .map((b) => ({ kind: \"block\", key: b.key, name: b.name }));\n const matchedBehaviors = behaviors\n .filter((b) => b.type.toLowerCase().includes(q) || b.description.toLowerCase().includes(q))\n .map((b) => ({ kind: \"behavior\", type: b.type }));\n const matchedClasses = Object.entries(classesByComponent).flatMap(([component, classes]) =>\n classes\n .filter((cls) => cls.toLowerCase().includes(q))\n .map((cls) => ({ kind: \"class\" as const, component, class: cls })),\n );\n const matchedTokens = tokens.semanticColors\n .filter((name) => name.toLowerCase().includes(q))\n .map((name) => ({ kind: \"token\" as const, name }));\n const results = [\n ...matchedComponents,\n ...matchedBlocks,\n ...matchedBehaviors,\n ...matchedClasses,\n ...matchedTokens,\n ];\n return { content: [{ type: \"text\", text: JSON.stringify(results, null, 2) }] };\n },\n );\n\n return server;\n}\n\nexport async function main(): Promise<void> {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { z } from \"zod\";\n\nconst here = path.dirname(fileURLToPath(import.meta.url));\nconst dataDir = path.join(here, \"data\");\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(path.join(dataDir, `${name}.json`), \"utf8\")) as T;\n}\n\ninterface PackageMeta {\n name: string;\n purpose: string;\n install: string | null;\n private?: boolean;\n version: string;\n}\n\ninterface TokensData {\n semanticColors: string[];\n light: Record<string, string>;\n dark: Record<string, string>;\n typography: { baseFontSize: string; fontFamilyTokens: string[]; note: string };\n}\n\ninterface PropMember {\n name: string;\n optional: boolean;\n type: string;\n doc: string;\n}\n\ninterface PropsInterface {\n name: string;\n extends?: string;\n members: PropMember[];\n}\n\ninterface ComponentData {\n name: string;\n package: string;\n category: string;\n sourceFile: string;\n /** silicaui-react entries: extracted from source via TS AST. silicaui-html\n * macros carry no static description (never hand-authored — see label/icon\n * instead) and omit these two fields. */\n description?: string;\n props?: PropsInterface[];\n usageExample?: string | null;\n /** silicaui-html macros only: palette label/icon, whether it's a container,\n * and the BehaviorType(s) its expansion carries (found by actually calling\n * expand(), not guessed — see get_behavior for the marker contract). */\n label?: string;\n icon?: string;\n container?: boolean;\n behaviors?: string[];\n}\n\ninterface BlockSlot {\n name: string;\n [key: string]: unknown;\n}\n\ninterface BlockData {\n key: string;\n name: string;\n category: string;\n version: string;\n description: string;\n tags?: string[];\n colors: string[];\n behaviors: string[];\n emailEligible: boolean;\n slots: BlockSlot[];\n root: unknown;\n preview?: unknown;\n}\n\ninterface BehaviorData {\n type: string;\n description: string;\n}\n\nconst packages = loadJson<PackageMeta[]>(\"packages\");\nconst tokens = loadJson<TokensData>(\"tokens\");\nconst classesByComponent = loadJson<Record<string, string[]>>(\"classes\");\nconst blocks = loadJson<BlockData[]>(\"blocks\");\nconst behaviors = loadJson<BehaviorData[]>(\"behaviors\");\nconst components = loadJson<ComponentData[]>(\"components\");\n\nfunction toKebab(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n\nfunction blockSummary(b: BlockData) {\n const { root: _root, ...summary } = b;\n return summary;\n}\n\nexport function createServer(): McpServer {\n const server = new McpServer({\n name: \"@wizeworks/silicaui-mcp\",\n version: \"0.1.0\",\n });\n\n server.registerTool(\n \"list_packages\",\n {\n title: \"List Silica UI packages\",\n description:\n \"List every package in the Silica UI family (@wizeworks/silicaui, @wizeworks/silicaui-react, @wizeworks/silicaui-html, @wizeworks/silicaui-behaviors, and the wrapper packages), with purpose, install command, and version.\",\n inputSchema: {},\n },\n async () => ({\n content: [{ type: \"text\", text: JSON.stringify(packages, null, 2) }],\n }),\n );\n\n server.registerTool(\n \"list_components\",\n {\n title: \"List Silica UI components\",\n description:\n \"List component names, categories, and source packages — spans BOTH @wizeworks/silicaui-react (typed React components) and @wizeworks/silicaui-html (the framework-neutral ComponentDef macros: Dialog, Popover, Combobox, etc., for non-React output). The same name can exist in both packages with different shapes; use get_component's package param to disambiguate. Optionally filter to one package (e.g. '@wizeworks/silicaui-react', '@wizeworks/silicaui-html', '@wizeworks/silicaui-charts').\",\n inputSchema: {\n package: z.string().optional().describe(\"Filter to one package name, e.g. '@wizeworks/silicaui-react'.\"),\n },\n },\n async ({ package: pkg }) => {\n const filtered = pkg ? components.filter((c) => c.package === pkg) : components;\n const summary = filtered.map(({ name, package: p, category, sourceFile }) => ({\n name,\n package: p,\n category,\n sourceFile,\n }));\n return { content: [{ type: \"text\", text: JSON.stringify(summary, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_component\",\n {\n title: \"Get a Silica UI component's real shape\",\n description:\n \"Get a component's real definition — for @wizeworks/silicaui-react: props (name, type, optional, doc — extracted from its actual TypeScript source) and a real, working usage example from the playground demos; for @wizeworks/silicaui-html: its palette category/label/icon, whether it's a container, and the BehaviorType(s) it carries (cross-reference with get_behavior for the marker contract). Use this instead of guessing prop names or shapes. Pass package when a name exists in more than one package.\",\n inputSchema: {\n name: z.string().describe(\"Component name, e.g. 'Button', 'DataTable', 'Dialog'.\"),\n package: z.string().optional().describe(\"Disambiguate when the name exists in more than one package, e.g. '@wizeworks/silicaui-html'.\"),\n },\n },\n async ({ name, package: pkg }) => {\n let matches = components.filter((c) => c.name.toLowerCase() === name.toLowerCase());\n if (pkg) matches = matches.filter((c) => c.package === pkg);\n if (!matches.length) {\n return {\n content: [\n {\n type: \"text\",\n text: `No component named \"${name}\"${pkg ? ` in ${pkg}` : \"\"}. Call list_components to see valid names.`,\n },\n ],\n isError: true,\n };\n }\n if (matches.length > 1) {\n return {\n content: [\n {\n type: \"text\",\n text: `\"${name}\" exists in more than one package — pass package to disambiguate: ${matches.map((c) => c.package).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(matches[0], null, 2) }] };\n },\n );\n\n server.registerTool(\n \"list_classes\",\n {\n title: \"List real Silica UI CSS class names\",\n description:\n \"List the exact, literal CSS class names Silica UI generates for a core component (e.g. 'button', 'card', 'badge') — or all components if none given. These are extracted directly from the class generators, so they are never hallucinated. Also covers 'color-utilities' (text-*/bg-*/border-* for every declared color).\",\n inputSchema: {\n component: z\n .string()\n .optional()\n .describe(\"A core @wizeworks/silicaui component name, e.g. 'button'. Omit to list every component's classes.\"),\n },\n },\n async ({ component }) => {\n if (!component) {\n return { content: [{ type: \"text\", text: JSON.stringify(classesByComponent, null, 2) }] };\n }\n const key = toKebab(component);\n const classes = classesByComponent[key];\n if (!classes) {\n return {\n content: [\n {\n type: \"text\",\n text: `No class data for \"${component}\". Known components: ${Object.keys(classesByComponent).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify({ component: key, classes }, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_tokens\",\n {\n title: \"Get Silica UI design tokens\",\n description:\n \"Get the semantic color list and their light/dark OKLCH values, the typography token model, and the scalar theme tokens (radius/border/depth/noise/focus/disabled-opacity) with defaults, ranges, and what each one actually affects.\",\n inputSchema: {},\n },\n async () => ({ content: [{ type: \"text\", text: JSON.stringify(tokens, null, 2) }] }),\n );\n\n server.registerTool(\n \"list_blocks\",\n {\n title: \"List Silica UI composed blocks\",\n description:\n \"List composed page blocks from @wizeworks/silicaui-html (hero sections, FAQs, feature grids, …) without their full node tree. Optionally filter by category or tag.\",\n inputSchema: {\n category: z.string().optional(),\n tag: z.string().optional(),\n },\n },\n async ({ category, tag }) => {\n const filtered = blocks.filter(\n (b) => (!category || b.category === category) && (!tag || (b.tags ?? []).includes(tag)),\n );\n return { content: [{ type: \"text\", text: JSON.stringify(filtered.map(blockSummary), null, 2) }] };\n },\n );\n\n server.registerTool(\n \"get_block\",\n {\n title: \"Get a Silica UI block's full node tree\",\n description:\n \"Get one composed block's full definition, including its node tree — the real, validated structure to reuse or adapt, not a guess.\",\n inputSchema: {\n key: z.string().describe(\"The block's stable key, e.g. 'hero_split_cta'.\"),\n },\n },\n async ({ key }) => {\n const block = blocks.find((b) => b.key === key);\n if (!block) {\n return {\n content: [\n {\n type: \"text\",\n text: `No block \"${key}\". Known keys: ${blocks.map((b) => b.key).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(block, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"list_behaviors\",\n {\n title: \"List Silica UI behavior types\",\n description:\n \"List the closed set of interactive behaviors that @wizeworks/silicaui-behaviors hydrates from data-sui-* markers (the vanilla-JS runtime for non-React output). Each type is also the BehaviorType a @wizeworks/silicaui-html ComponentDef macro carries — cross-reference with get_component. Call this to see the current set rather than assuming a fixed list; it grows over time.\",\n inputSchema: {},\n },\n async () => ({ content: [{ type: \"text\", text: JSON.stringify(behaviors, null, 2) }] }),\n );\n\n server.registerTool(\n \"get_behavior\",\n {\n title: \"Get one Silica UI behavior's contract\",\n description: \"Get the marker contract and semantics for one behavior type.\",\n inputSchema: {\n type: z.string().describe(\"Behavior type, e.g. 'disclosure'.\"),\n },\n },\n async ({ type }) => {\n const behavior = behaviors.find((b) => b.type === type);\n if (!behavior) {\n return {\n content: [\n {\n type: \"text\",\n text: `No behavior \"${type}\". Known types: ${behaviors.map((b) => b.type).join(\", \")}`,\n },\n ],\n isError: true,\n };\n }\n return { content: [{ type: \"text\", text: JSON.stringify(behavior, null, 2) }] };\n },\n );\n\n server.registerTool(\n \"search_docs\",\n {\n title: \"Search Silica UI catalog data\",\n description:\n \"Full-text search across everything this server knows: component names/descriptions, block names/descriptions, behavior descriptions, literal CSS class names, and design tokens. Use this when you don't know the exact name to look up.\",\n inputSchema: {\n query: z.string().describe(\"Search term, case-insensitive.\"),\n },\n },\n async ({ query }) => {\n const q = query.toLowerCase();\n const matchedComponents = components\n .filter((c) => c.name.toLowerCase().includes(q) || (c.description ?? \"\").toLowerCase().includes(q) || (c.label ?? \"\").toLowerCase().includes(q))\n .map((c) => ({ kind: \"component\", name: c.name, package: c.package }));\n const matchedBlocks = blocks\n .filter((b) => b.name.toLowerCase().includes(q) || b.description.toLowerCase().includes(q))\n .map((b) => ({ kind: \"block\", key: b.key, name: b.name }));\n const matchedBehaviors = behaviors\n .filter((b) => b.type.toLowerCase().includes(q) || b.description.toLowerCase().includes(q))\n .map((b) => ({ kind: \"behavior\", type: b.type }));\n const matchedClasses = Object.entries(classesByComponent).flatMap(([component, classes]) =>\n classes\n .filter((cls) => cls.toLowerCase().includes(q))\n .map((cls) => ({ kind: \"class\" as const, component, class: cls })),\n );\n const matchedTokens = tokens.semanticColors\n .filter((name) => name.toLowerCase().includes(q))\n .map((name) => ({ kind: \"token\" as const, name }));\n const results = [\n ...matchedComponents,\n ...matchedBlocks,\n ...matchedBehaviors,\n ...matchedClasses,\n ...matchedTokens,\n ];\n return { content: [{ type: \"text\", text: JSON.stringify(results, null, 2) }] };\n },\n );\n\n return server;\n}\n\nexport async function main(): Promise<void> {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wizeworks/silicaui-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "A local MCP server that lets AI coding assistants query the Silica UI design system — real class names, component props, blocks, and behaviors — instead of guessing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|