@hareru/mcp 0.4.1 → 0.4.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.
package/dist/index.js CHANGED
@@ -22,6 +22,16 @@ import {
22
22
  } from "@hareru/registry";
23
23
 
24
24
  // src/prompts.ts
25
+ function promptError(message) {
26
+ return {
27
+ messages: [
28
+ {
29
+ role: "user",
30
+ content: { type: "text", text: `Error: ${message}` }
31
+ }
32
+ ]
33
+ };
34
+ }
25
35
  function registerPrompts(server) {
26
36
  server.prompt(
27
37
  "create-ui",
@@ -33,8 +43,14 @@ function registerPrompts(server) {
33
43
  framework: z.string().optional().describe("Target framework: react (default)")
34
44
  },
35
45
  async ({ description, framework }) => {
36
- const registry = loadRegistry();
37
- const schema = loadSchema();
46
+ let registry;
47
+ let schema;
48
+ try {
49
+ registry = loadRegistry();
50
+ schema = loadSchema();
51
+ } catch (err) {
52
+ return promptError(err instanceof Error ? err.message : String(err));
53
+ }
38
54
  const componentList = registry.components.map((c) => {
39
55
  const variants = c.variants ?? [];
40
56
  const variantInfo = variants.length > 0 ? ` [${variants.flatMap((v) => Object.entries(v.variants).map(([k, opts]) => `${k}(${opts.join("|")})`)).join(", ")}]` : "";
@@ -94,7 +110,12 @@ Generate a complete ${fw} component that fulfills this requirement.`
94
110
  )
95
111
  },
96
112
  async ({ description }) => {
97
- const registry = loadRegistry();
113
+ let registry;
114
+ try {
115
+ registry = loadRegistry();
116
+ } catch (err) {
117
+ return promptError(err instanceof Error ? err.message : String(err));
118
+ }
98
119
  const componentList = registry.components.map((c) => {
99
120
  const desc = c.description ? ` \u2014 ${c.description}` : "";
100
121
  return `- ${c.name}${desc}`;
@@ -165,7 +186,12 @@ Generate a complete React component that combines Tailwind layout utilities with
165
186
  "Get the rules for using Hareru UI in your project",
166
187
  {},
167
188
  async () => {
168
- const rules = loadConsumerRules();
189
+ let rules;
190
+ try {
191
+ rules = loadConsumerRules();
192
+ } catch (err) {
193
+ return promptError(err instanceof Error ? err.message : String(err));
194
+ }
169
195
  const CODE_BLOCK_SECTIONS = /* @__PURE__ */ new Set(["cssImports"]);
170
196
  const rulesSections = Object.entries(rules.rules).map(([key, section]) => {
171
197
  const ruleList = section.rules.map((r) => `- ${r}`).join("\n");
@@ -210,20 +236,47 @@ ${tokenRef}`
210
236
  }
211
237
 
212
238
  // src/resources.ts
239
+ function errorMessage(err) {
240
+ return err instanceof Error ? err.message : String(err);
241
+ }
242
+ function resourceError(uri, err) {
243
+ return {
244
+ contents: [
245
+ {
246
+ uri: uri.href,
247
+ text: JSON.stringify({ error: errorMessage(err) })
248
+ }
249
+ ]
250
+ };
251
+ }
213
252
  function registerResources(server) {
214
- const schema = loadSchema();
215
- const tokenCount = schema.properties.tokenCount.const;
216
- const registry = loadRegistry();
253
+ let tokenCount;
254
+ let componentCount;
255
+ let bundleCount;
256
+ try {
257
+ tokenCount = loadSchema().properties.tokenCount.const;
258
+ } catch {
259
+ }
260
+ try {
261
+ const reg = loadRegistry();
262
+ componentCount = reg.componentCount;
263
+ bundleCount = reg.taskBundles?.length ?? 0;
264
+ } catch {
265
+ }
217
266
  server.resource(
218
267
  "tokens",
219
268
  "hareru-ui://tokens",
220
269
  {
221
- description: `DTCG design tokens (light/dark themes, ${tokenCount} CSS custom properties)`,
270
+ description: tokenCount !== void 0 ? `DTCG design tokens (light/dark themes, ${tokenCount} CSS custom properties)` : "DTCG design tokens (light/dark themes)",
222
271
  mimeType: "application/json"
223
272
  },
224
- async (uri) => ({
225
- contents: [{ uri: uri.href, text: JSON.stringify(loadTokens(), null, 2) }]
226
- })
273
+ async (uri) => {
274
+ try {
275
+ return { contents: [{ uri: uri.href, text: JSON.stringify(loadTokens(), null, 2) }] };
276
+ } catch (err) {
277
+ return resourceError(uri, err);
278
+ }
279
+ }
227
280
  );
228
281
  server.resource(
229
282
  "tokens-schema",
@@ -232,31 +285,46 @@ function registerResources(server) {
232
285
  description: "JSON Schema for design tokens \u2014 CSS variable enums and type constraints",
233
286
  mimeType: "application/json"
234
287
  },
235
- async (uri) => ({
236
- contents: [{ uri: uri.href, text: JSON.stringify(loadSchema(), null, 2) }]
237
- })
288
+ async (uri) => {
289
+ try {
290
+ return { contents: [{ uri: uri.href, text: JSON.stringify(loadSchema(), null, 2) }] };
291
+ } catch (err) {
292
+ return resourceError(uri, err);
293
+ }
294
+ }
238
295
  );
239
296
  server.resource(
240
297
  "components",
241
298
  "hareru-ui://components",
242
299
  {
243
- description: `Component registry \u2014 ${registry.componentCount} components with CVA variants, Props interfaces, and slot contracts`,
300
+ description: componentCount !== void 0 ? `Component registry \u2014 ${componentCount} components with CVA variants, Props interfaces, and slot contracts` : "Component registry \u2014 components with CVA variants, Props interfaces, and slot contracts",
244
301
  mimeType: "application/json"
245
302
  },
246
- async (uri) => ({
247
- contents: [{ uri: uri.href, text: JSON.stringify(registry, null, 2) }]
248
- })
303
+ async (uri) => {
304
+ try {
305
+ return { contents: [{ uri: uri.href, text: JSON.stringify(loadRegistry(), null, 2) }] };
306
+ } catch (err) {
307
+ return resourceError(uri, err);
308
+ }
309
+ }
249
310
  );
250
311
  server.resource(
251
312
  "bundles",
252
313
  "hareru-ui://bundles",
253
314
  {
254
- description: `Task bundles \u2014 ${registry.taskBundles?.length ?? 0} curated component sets for common UI patterns`,
315
+ description: bundleCount !== void 0 ? `Task bundles \u2014 ${bundleCount} curated component sets for common UI patterns` : "Task bundles \u2014 curated component sets for common UI patterns",
255
316
  mimeType: "application/json"
256
317
  },
257
- async (uri) => ({
258
- contents: [{ uri: uri.href, text: JSON.stringify(registry.taskBundles ?? [], null, 2) }]
259
- })
318
+ async (uri) => {
319
+ try {
320
+ const registry = loadRegistry();
321
+ return {
322
+ contents: [{ uri: uri.href, text: JSON.stringify(registry.taskBundles ?? [], null, 2) }]
323
+ };
324
+ } catch (err) {
325
+ return resourceError(uri, err);
326
+ }
327
+ }
260
328
  );
261
329
  server.resource(
262
330
  "components-schema",
@@ -265,9 +333,15 @@ function registerResources(server) {
265
333
  description: "JSON Schema for the component registry",
266
334
  mimeType: "application/json"
267
335
  },
268
- async (uri) => ({
269
- contents: [{ uri: uri.href, text: JSON.stringify(loadComponentSchema(), null, 2) }]
270
- })
336
+ async (uri) => {
337
+ try {
338
+ return {
339
+ contents: [{ uri: uri.href, text: JSON.stringify(loadComponentSchema(), null, 2) }]
340
+ };
341
+ } catch (err) {
342
+ return resourceError(uri, err);
343
+ }
344
+ }
271
345
  );
272
346
  server.resource(
273
347
  "consumer-rules",
@@ -276,14 +350,30 @@ function registerResources(server) {
276
350
  description: "Consumer rules for AI agents \u2014 import patterns, styling rules, and token reference",
277
351
  mimeType: "application/json"
278
352
  },
279
- async (uri) => ({
280
- contents: [{ uri: uri.href, text: JSON.stringify(loadConsumerRules(), null, 2) }]
281
- })
353
+ async (uri) => {
354
+ try {
355
+ return {
356
+ contents: [{ uri: uri.href, text: JSON.stringify(loadConsumerRules(), null, 2) }]
357
+ };
358
+ } catch (err) {
359
+ return resourceError(uri, err);
360
+ }
361
+ }
282
362
  );
283
363
  }
284
364
 
285
365
  // src/tools.ts
286
366
  import { z as z2 } from "zod";
367
+ function safeLoad(loader, label) {
368
+ try {
369
+ return { data: loader() };
370
+ } catch (err) {
371
+ return { error: `${label}: ${err instanceof Error ? err.message : String(err)}` };
372
+ }
373
+ }
374
+ function mcpError(message) {
375
+ return { content: [{ type: "text", text: message }], isError: true };
376
+ }
287
377
  function escPipe(s) {
288
378
  return s.replace(/\|/g, "\\|");
289
379
  }
@@ -444,7 +534,9 @@ function registerTools(server) {
444
534
  "Get usage documentation for a Hareru UI component \u2014 import, structure, variants, props, states, accessibility, slots, and examples",
445
535
  { componentName: z2.string().describe('Component name (e.g. "Button", "Card", "Alert")') },
446
536
  async ({ componentName }) => {
447
- const registry = loadRegistry();
537
+ const result = safeLoad(loadRegistry, "Component registry");
538
+ if (result.error) return mcpError(result.error);
539
+ const registry = result.data;
448
540
  const entry = registry.components.find(
449
541
  (c) => c.name.toLowerCase() === componentName.toLowerCase()
450
542
  );
@@ -470,7 +562,9 @@ function registerTools(server) {
470
562
  "Get usage documentation for a Hareru UI task bundle \u2014 components, CSS imports, and token categories",
471
563
  { bundleName: z2.string().describe('Bundle name (e.g. "agent-chat-shell", "form-basics")') },
472
564
  async ({ bundleName }) => {
473
- const registry = loadRegistry();
565
+ const result = safeLoad(loadRegistry, "Component registry");
566
+ if (result.error) return mcpError(result.error);
567
+ const registry = result.data;
474
568
  const bundles = registry.taskBundles ?? [];
475
569
  const bundle = bundles.find((b) => b.name.toLowerCase() === bundleName.toLowerCase());
476
570
  if (!bundle) {
@@ -550,7 +644,9 @@ function registerTools(server) {
550
644
  value: z2.string().describe('The value to validate (e.g. "oklch(0.5 0.2 250)")')
551
645
  },
552
646
  async ({ tokenType, value }) => {
553
- const schema = loadSchema();
647
+ const result = safeLoad(loadSchema, "Token schema");
648
+ if (result.error) return mcpError(result.error);
649
+ const schema = result.data;
554
650
  const constraint = schema.properties.typeConstraints.properties[tokenType];
555
651
  if (!constraint) {
556
652
  const availableTypes = Object.keys(schema.properties.typeConstraints.properties).join(", ");
@@ -660,7 +756,9 @@ ${allModes}`
660
756
  ]).describe("Component group to filter by")
661
757
  },
662
758
  async ({ group }) => {
663
- const registry = loadRegistry();
759
+ const result = safeLoad(loadRegistry, "Component registry");
760
+ if (result.error) return mcpError(result.error);
761
+ const registry = result.data;
664
762
  const filtered = registry.components.filter((c) => c.group === group);
665
763
  if (filtered.length === 0) {
666
764
  const groups = [...new Set(registry.components.map((c) => c.group))].sort();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/prompts.ts","../src/utils.ts","../src/resources.ts","../src/tools.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { dirname, join } 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 { registerPrompts } from './prompts.js';\nimport { registerResources } from './resources.js';\nimport { registerTools } from './tools.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8')) as {\n version: string;\n};\n\nexport function createServer(): McpServer {\n const server = new McpServer({\n name: 'hareru-ui',\n version: pkg.version,\n });\n\n registerResources(server);\n registerTools(server);\n registerPrompts(server);\n\n return server;\n}\n\nexport async function startServer(): Promise<void> {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Hareru UI MCP server started (stdio)');\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { loadConsumerRules, loadRegistry, loadSchema } from './utils.js';\n\nexport function registerPrompts(server: McpServer): void {\n server.prompt(\n 'create-ui',\n 'Generate a UI component using Hareru UI design system',\n {\n description: z\n .string()\n .describe(\n 'What the component should do (e.g. \"A settings form with name and email fields\")',\n ),\n framework: z.string().optional().describe('Target framework: react (default)'),\n },\n async ({ description, framework }) => {\n const registry = loadRegistry();\n const schema = loadSchema();\n\n const componentList = registry.components\n .map((c) => {\n const variants = c.variants ?? [];\n const variantInfo =\n variants.length > 0\n ? ` [${variants.flatMap((v) => Object.entries(v.variants).map(([k, opts]) => `${k}(${opts.join('|')})`)).join(', ')}]`\n : '';\n const desc = c.description ? ` — ${c.description}` : '';\n return `- ${c.name}${variantInfo}${desc}`;\n })\n .join('\\n');\n\n const bundles = registry.taskBundles ?? [];\n const bundleList =\n bundles.length > 0\n ? bundles\n .map((b) => `- ${b.name}: ${b.description} (${b.components.length} components)`)\n .join('\\n')\n : '';\n\n const cssVars = schema.properties.cssVariables.items.enum.slice(0, 20).join(', ');\n const fw = framework ?? 'react';\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `You are a UI developer using the Hareru UI design system (${fw}).\n\n## Available Components\n\n${componentList}\n\n## Design Token CSS Variables (sample)\n\n${cssVars}, ...\n\n## Rules\n\n1. Import components from '@hareru/ui'. For CSS setup, refer to the consumer-rules (standalone: '@hareru/ui/styles.css', portable: '@hareru/tokens/css' + '@hareru/ui/styles/components.css')\n2. Use only semantic variant props (e.g. variant=\"default\"), never hardcode CSS values\n3. Use CSS variables (--hui-*) for any custom styling\n4. All components support forwardRef\n5. Use BEM class naming (hui-*) if adding custom classes\n6. Colors use OKLCH format\n\n## Task\n\n${description}\n${bundleList ? `\\n## Available Bundles\\n\\n${bundleList}\\n` : ''}\nGenerate a complete ${fw} component that fulfills this requirement.`,\n },\n },\n ],\n };\n },\n );\n\n server.prompt(\n 'create-ui-tailwind',\n 'Generate a UI component mixing Hareru UI and Tailwind CSS with Cascade Layer guidance',\n {\n description: z\n .string()\n .describe(\n 'What the component should do (e.g. \"A dashboard card with Tailwind layout and Hareru UI buttons\")',\n ),\n },\n async ({ description }) => {\n const registry = loadRegistry();\n\n const componentList = registry.components\n .map((c) => {\n const desc = c.description ? ` — ${c.description}` : '';\n return `- ${c.name}${desc}`;\n })\n .join('\\n');\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `You are a UI developer using Hareru UI + Tailwind CSS v4 together.\n\n## Cascade Layer Order\n\nDeclare this layer order at the top of your CSS entry point:\n\n\\`\\`\\`css\n@layer theme, base, hui, components, utilities;\n@import 'tailwindcss';\n@import '@hareru/tokens/css';\n@import '@hareru/ui/styles/components.layer.css';\n\\`\\`\\`\n\n- Hareru components live in \\`@layer hui\\` — below Tailwind \\`utilities\\`\n- Tailwind utility classes (e.g. \\`flex\\`, \\`gap-4\\`, \\`p-2\\`) can safely override Hareru layout\n- Never use Tailwind classes to override Hareru component internals (colors, border-radius, shadows) — use \\`--hui-*\\` CSS variables instead\n\n## Mixing Classes Example\n\n\\`\\`\\`tsx\n{/* Tailwind for layout, Hareru for components */}\n<div className=\"flex gap-4 p-6\">\n <Card className=\"flex-1\">\n <CardHeader>Title</CardHeader>\n <CardContent>\n <Button variant=\"default\">Action</Button>\n </CardContent>\n </Card>\n</div>\n\\`\\`\\`\n\n## Available Components\n\n${componentList}\n\n## Rules\n\n1. Import components from \\`@hareru/ui\\`\n2. Use Tailwind utilities for layout (flex, grid, gap, padding, margin)\n3. Use Hareru components for interactive UI elements (Button, Input, Card, Dialog)\n4. Use \\`--hui-*\\` CSS variables for theming — do not override with Tailwind color classes\n5. Use BEM class naming (\\`hui-*\\`) if adding custom component styles\n6. Colors are OKLCH format\n\n## Task\n\n${description}\n\nGenerate a complete React component that combines Tailwind layout utilities with Hareru UI components.`,\n },\n },\n ],\n };\n },\n );\n\n server.prompt(\n 'consumer-rules',\n 'Get the rules for using Hareru UI in your project',\n {},\n async () => {\n const rules = loadConsumerRules();\n\n const CODE_BLOCK_SECTIONS = new Set(['cssImports']);\n\n const rulesSections = Object.entries(rules.rules)\n .map(([key, section]) => {\n const ruleList = section.rules.map((r) => `- ${r}`).join('\\n');\n const examples = Object.entries(section.examples)\n .map(([label, code]) =>\n CODE_BLOCK_SECTIONS.has(key)\n ? `**${label}:**\\n\\`\\`\\`css\\n${code}\\n\\`\\`\\``\n : ` ${label}: ${code}`,\n )\n .join('\\n');\n return `### ${key}\\n${section.description}\\n\\n${ruleList}\\n\\nExamples:\\n${examples}`;\n })\n .join('\\n\\n');\n\n const tokenRef = Object.entries(rules.tokenQuickReference)\n .map(([category, pattern]) => `- ${category}: ${pattern}`)\n .join('\\n');\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `# Hareru UI Consumer Rules (v${rules.version})\n\nThese rules apply when using Hareru UI in any project.\n\n## Rules\n\n${rulesSections}\n\n## Token Quick Reference\n\n${tokenRef}`,\n },\n },\n ],\n };\n },\n );\n}\n","export {\n loadTokens,\n loadSchema,\n loadRegistry,\n loadComponentSchema,\n loadConsumerRules,\n CSS_MODES,\n CSS_MODE_DESCRIPTIONS,\n recommendCssMode,\n buildSlotTree,\n} from '@hareru/registry';\n\nexport type {\n TokensJSON,\n SchemaJSON,\n ComponentRegistryJSON,\n ComponentEntry,\n TaskBundle,\n ComponentGroup,\n TokenCategory,\n VariantDef,\n CustomPropDef,\n PropDef,\n StateDef,\n A11yDef,\n SlotDef,\n SlotRole,\n ExampleDef,\n ComponentSchemaJSON,\n ConsumerRulesJSON,\n CssMode,\n CssModeContext,\n} from '@hareru/registry';\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n loadComponentSchema,\n loadConsumerRules,\n loadRegistry,\n loadSchema,\n loadTokens,\n} from './utils.js';\n\nexport function registerResources(server: McpServer): void {\n const schema = loadSchema();\n const tokenCount = schema.properties.tokenCount.const;\n const registry = loadRegistry();\n\n server.resource(\n 'tokens',\n 'hareru-ui://tokens',\n {\n description: `DTCG design tokens (light/dark themes, ${tokenCount} CSS custom properties)`,\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(loadTokens(), null, 2) }],\n }),\n );\n\n server.resource(\n 'tokens-schema',\n 'hareru-ui://tokens/schema',\n {\n description: 'JSON Schema for design tokens — CSS variable enums and type constraints',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(loadSchema(), null, 2) }],\n }),\n );\n\n server.resource(\n 'components',\n 'hareru-ui://components',\n {\n description: `Component registry — ${registry.componentCount} components with CVA variants, Props interfaces, and slot contracts`,\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(registry, null, 2) }],\n }),\n );\n\n server.resource(\n 'bundles',\n 'hareru-ui://bundles',\n {\n description: `Task bundles — ${registry.taskBundles?.length ?? 0} curated component sets for common UI patterns`,\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(registry.taskBundles ?? [], null, 2) }],\n }),\n );\n\n server.resource(\n 'components-schema',\n 'hareru-ui://components/schema',\n {\n description: 'JSON Schema for the component registry',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(loadComponentSchema(), null, 2) }],\n }),\n );\n\n server.resource(\n 'consumer-rules',\n 'hareru-ui://rules/consumer',\n {\n description:\n 'Consumer rules for AI agents — import patterns, styling rules, and token reference',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [{ uri: uri.href, text: JSON.stringify(loadConsumerRules(), null, 2) }],\n }),\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport {\n CSS_MODES,\n CSS_MODE_DESCRIPTIONS,\n buildSlotTree,\n loadRegistry,\n loadSchema,\n recommendCssMode,\n} from './utils.js';\nimport type { ComponentEntry } from './utils.js';\n\nfunction escPipe(s: string): string {\n return s.replace(/\\|/g, '\\\\|');\n}\n\nfunction formatVariantsTable(entry: ComponentEntry): string {\n const variants = entry.variants ?? [];\n if (variants.length === 0) return 'No CVA variants defined.';\n\n const lines: string[] = ['| Variant | Options | Default |', '|---------|---------|---------|'];\n for (const v of variants) {\n for (const [key, options] of Object.entries(v.variants)) {\n const defaultVal = v.defaultVariants[key] ?? '-';\n lines.push(\n `| ${escPipe(key)} | ${options.map(escPipe).join(', ')} | ${escPipe(defaultVal)} |`,\n );\n }\n }\n return lines.join('\\n');\n}\n\nfunction formatUsageMarkdown(entry: ComponentEntry): string {\n const parts: string[] = [];\n\n parts.push(`# ${entry.displayName}`);\n parts.push('');\n\n // Description (Phase 3A)\n parts.push(entry.description);\n parts.push('');\n\n // AI Guidance (Phase 3A)\n if (entry.aiHint) {\n parts.push('## AI Guidance');\n parts.push('');\n parts.push(entry.aiHint);\n parts.push('');\n }\n\n // Import section\n parts.push('## Import');\n parts.push('');\n parts.push('```tsx');\n const subs = entry.subcomponents ?? [];\n const allNames = [entry.name, ...subs];\n parts.push(`import { ${allNames.join(', ')} } from '@hareru/ui';`);\n parts.push('```');\n parts.push('');\n\n // CSS section (registry-driven)\n parts.push('## CSS');\n parts.push('');\n parts.push('**Standalone:**');\n parts.push('```css');\n parts.push(`@import '@hareru/ui/styles.css';`);\n parts.push('```');\n parts.push('');\n parts.push('**Per-component:**');\n parts.push('```css');\n parts.push(`@import '@hareru/tokens/css';`);\n for (const dep of entry.requiredCssArtifacts ?? []) {\n parts.push(`@import '@hareru/ui/${dep}';`);\n }\n parts.push(`@import '@hareru/ui/${entry.cssArtifact}';`);\n parts.push('```');\n parts.push('');\n\n // Structure (Phase 3D) — placed after CSS, before Variants in markdown doc format\n const slotTree = buildSlotTree(\n entry.name,\n entry.slots,\n entry.name === 'Table' ? ['TableRow is also valid inside TableHeader.'] : undefined,\n );\n if (slotTree) {\n parts.push('## Structure');\n parts.push('');\n parts.push('```text');\n parts.push(slotTree);\n parts.push('```');\n parts.push('');\n }\n\n const variants = entry.variants ?? [];\n const props = entry.props ?? [];\n\n if (variants.length > 0) {\n parts.push('## Variants');\n parts.push('');\n parts.push(formatVariantsTable(entry));\n parts.push('');\n }\n\n if (props.length > 0) {\n parts.push('## Props');\n parts.push('');\n for (const prop of props) {\n if (prop.extends) {\n parts.push(`- **${prop.name}** extends \\`${prop.extends}\\``);\n } else {\n parts.push(`- **${prop.name}**`);\n }\n }\n parts.push('');\n }\n\n // States (Phase 3C)\n const states = entry.states ?? [];\n if (states.length > 0) {\n parts.push('## States');\n parts.push('');\n parts.push('| State | Type | Values | Default |');\n parts.push('|-------|------|--------|---------|');\n for (const s of states) {\n const values = s.type === 'enum' ? s.values.map(escPipe).join(', ') : '-';\n const def = s.type === 'enum' && s.defaultValue ? escPipe(s.defaultValue) : '-';\n parts.push(`| ${escPipe(s.name)} | ${s.type} | ${values} | ${def} |`);\n }\n parts.push('');\n }\n\n // Accessibility (Phase 3C)\n const a11y = entry.a11y;\n if (a11y) {\n parts.push('## Accessibility');\n parts.push('');\n if (a11y.roles?.length) parts.push(`- Roles: ${a11y.roles.join(', ')}`);\n if (a11y.ariaAttributes?.length) parts.push(`- ARIA: ${a11y.ariaAttributes.join(', ')}`);\n if (a11y.semanticElements?.length)\n parts.push(`- Semantic elements: ${a11y.semanticElements.join(', ')}`);\n if (a11y.keyboardInteractions?.length)\n parts.push(`- Keyboard: ${a11y.keyboardInteractions.join('; ')}`);\n if (a11y.liveRegion) parts.push('- Live region: yes');\n if (a11y.notes) parts.push(`- Notes: ${a11y.notes}`);\n parts.push('');\n }\n\n // Also Consider (Phase 3A)\n if (entry.peerComponents) {\n parts.push('## Also Consider');\n parts.push('');\n for (const peer of entry.peerComponents) {\n parts.push(`- ${peer}`);\n }\n parts.push('');\n }\n\n // Example (Phase 3C: prefer canonical examples from manifest)\n const examples = entry.examples ?? [];\n if (examples.length > 0) {\n parts.push('## Example');\n parts.push('');\n for (const ex of examples) {\n parts.push(`### ${ex.title}`);\n parts.push('');\n parts.push('```tsx');\n parts.push(ex.code);\n parts.push('```');\n parts.push('');\n }\n } else {\n // Fallback: auto-generated example\n parts.push('## Example');\n parts.push('');\n parts.push('```tsx');\n if (variants.length > 0) {\n const firstVariant = variants[0];\n const propsStr = Object.entries(firstVariant.defaultVariants)\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(' ');\n parts.push(`<${entry.name} ${propsStr}>Content</${entry.name}>`);\n } else if (subs.length > 0) {\n parts.push(`<${entry.name}>`);\n for (const sub of subs) {\n parts.push(` <${sub}>Content</${sub}>`);\n }\n parts.push(`</${entry.name}>`);\n } else {\n parts.push(`<${entry.name}>Content</${entry.name}>`);\n }\n parts.push('```');\n }\n\n return parts.join('\\n');\n}\n\nexport function registerTools(server: McpServer): void {\n server.tool(\n 'get-component-usage',\n 'Get usage documentation for a Hareru UI component — import, structure, variants, props, states, accessibility, slots, and examples',\n { componentName: z.string().describe('Component name (e.g. \"Button\", \"Card\", \"Alert\")') },\n async ({ componentName }) => {\n const registry = loadRegistry();\n const entry = registry.components.find(\n (c) => c.name.toLowerCase() === componentName.toLowerCase(),\n );\n\n if (!entry) {\n const available = registry.components.map((c) => c.name).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Component \"${componentName}\" not found. Available components: ${available}`,\n },\n ],\n isError: true,\n };\n }\n\n return {\n content: [{ type: 'text' as const, text: formatUsageMarkdown(entry) }],\n };\n },\n );\n\n server.tool(\n 'get-bundle-usage',\n 'Get usage documentation for a Hareru UI task bundle — components, CSS imports, and token categories',\n { bundleName: z.string().describe('Bundle name (e.g. \"agent-chat-shell\", \"form-basics\")') },\n async ({ bundleName }) => {\n const registry = loadRegistry();\n const bundles = registry.taskBundles ?? [];\n const bundle = bundles.find((b) => b.name.toLowerCase() === bundleName.toLowerCase());\n\n if (!bundle) {\n const available = bundles.map((b) => b.name).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Bundle \"${bundleName}\" not found. Available bundles: ${available}`,\n },\n ],\n isError: true,\n };\n }\n\n const componentMap = new Map(registry.components.map((c) => [c.name, c]));\n\n const parts: string[] = [];\n parts.push(`# Bundle: ${bundle.name}`);\n parts.push('');\n parts.push(bundle.description);\n parts.push('');\n\n // Import section — expand subcomponents so the import is copy-pasteable\n const allImports: string[] = [];\n for (const compName of bundle.components) {\n const comp = componentMap.get(compName);\n allImports.push(compName);\n if (comp?.subcomponents) {\n allImports.push(...comp.subcomponents);\n }\n }\n parts.push('## Import');\n parts.push('');\n parts.push('```tsx');\n parts.push(`import { ${allImports.join(', ')} } from '@hareru/ui';`);\n parts.push('```');\n parts.push('');\n\n // CSS section\n parts.push('## CSS');\n parts.push('');\n parts.push('**Standalone:**');\n parts.push('```css');\n parts.push(`@import '@hareru/ui/styles.css';`);\n parts.push('```');\n parts.push('');\n parts.push('**Per-component:**');\n parts.push('```css');\n parts.push(`@import '@hareru/tokens/css';`);\n for (const artifact of bundle.cssArtifacts) {\n parts.push(`@import '@hareru/ui/${artifact}';`);\n }\n parts.push('```');\n parts.push('');\n\n // Token categories\n parts.push('## Token Categories');\n parts.push('');\n parts.push(bundle.tokenCategories.join(', '));\n parts.push('');\n\n // Components detail\n parts.push('## Components');\n parts.push('');\n for (const compName of bundle.components) {\n const comp = componentMap.get(compName);\n if (comp) {\n parts.push(`- **${comp.name}** — ${comp.description}`);\n } else {\n parts.push(`- **${compName}**`);\n }\n }\n parts.push('');\n\n return {\n content: [{ type: 'text' as const, text: parts.join('\\n') }],\n };\n },\n );\n\n server.tool(\n 'validate-token-value',\n 'Validate a CSS token value against the Hareru UI design token schema',\n {\n tokenType: z\n .string()\n .describe(\n 'Token type: color, dimension, fontFamily, fontWeight, duration, number, shadow, typography, cubicBezier',\n ),\n value: z.string().describe('The value to validate (e.g. \"oklch(0.5 0.2 250)\")'),\n },\n async ({ tokenType, value }) => {\n const schema = loadSchema();\n const constraint =\n schema.properties.typeConstraints.properties[\n tokenType as keyof typeof schema.properties.typeConstraints.properties\n ];\n\n if (!constraint) {\n const availableTypes = Object.keys(schema.properties.typeConstraints.properties).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Unknown token type \"${tokenType}\". Available types: ${availableTypes}`,\n },\n ],\n isError: true,\n };\n }\n\n if (!constraint.pattern) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Valid — token type \"${tokenType}\" has no pattern constraint (any ${constraint.type ?? 'string'} value accepted).`,\n },\n ],\n };\n }\n\n let regex: RegExp;\n try {\n regex = new RegExp(constraint.pattern);\n } catch {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Error — invalid pattern for token type \"${tokenType}\": ${constraint.pattern}`,\n },\n ],\n isError: true,\n };\n }\n\n const isValid = regex.test(value);\n\n if (isValid) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Valid — \"${value}\" matches the ${tokenType} pattern: ${constraint.pattern}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `Invalid — \"${value}\" does not match the ${tokenType} pattern.\\nExpected: ${constraint.pattern}\\nDescription: ${constraint.description ?? tokenType}`,\n },\n ],\n };\n },\n );\n\n server.tool(\n 'recommend-css-mode',\n 'Recommend the best CSS import mode for a Hareru UI project based on project context',\n {\n hasTailwind: z.boolean().describe('Whether Tailwind CSS is detected in the project'),\n componentCount: z\n .number()\n .int()\n .min(0)\n .describe('Number of Hareru components used in the project'),\n hasExistingReset: z\n .boolean()\n .optional()\n .describe(\n 'Whether the project already has a CSS reset or framework (e.g. Bootstrap, Pico CSS)',\n ),\n },\n async ({ hasTailwind, componentCount, hasExistingReset }) => {\n const result = recommendCssMode({ hasTailwind, componentCount, hasExistingReset });\n\n const allModes = CSS_MODES.map((m) => {\n const marker = m === result.mode ? ' ← recommended' : '';\n return `- **${m}**: ${CSS_MODE_DESCRIPTIONS[m]}${marker}`;\n }).join('\\n');\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `## Recommended CSS Mode: \\`${result.mode}\\`\\n\\n${result.reason}\\n\\n## All Modes\\n\\n${allModes}`,\n },\n ],\n };\n },\n );\n\n server.tool(\n 'list-components-by-group',\n 'List Hareru UI components filtered by group',\n {\n group: z\n .enum([\n 'core',\n 'form',\n 'layout',\n 'overlay',\n 'navigation',\n 'feedback',\n 'data-display',\n 'agent',\n 'di-domain',\n ])\n .describe('Component group to filter by'),\n },\n async ({ group }) => {\n const registry = loadRegistry();\n const filtered = registry.components.filter((c) => c.group === group);\n\n if (filtered.length === 0) {\n const groups = [...new Set(registry.components.map((c) => c.group))].sort();\n return {\n content: [\n {\n type: 'text' as const,\n text: `No components in group \"${group}\". Available groups: ${groups.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n const lines = filtered\n .map((c) => {\n const variants = c.variants ?? [];\n const variantInfo =\n variants.length > 0\n ? ` [${variants.flatMap((v) => Object.entries(v.variants).map(([k, opts]) => `${k}(${opts.join('|')})`)).join(', ')}]`\n : '';\n return `- **${c.name}**${variantInfo} — ${c.description}`;\n })\n .join('\\n');\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `## ${group} (${filtered.length} components)\\n\\n${lines}`,\n },\n ],\n };\n },\n );\n}\n"],"mappings":"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","names":["z","z"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/prompts.ts","../src/utils.ts","../src/resources.ts","../src/tools.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { dirname, join } 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 { registerPrompts } from './prompts.js';\nimport { registerResources } from './resources.js';\nimport { registerTools } from './tools.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8')) as {\n version: string;\n};\n\nexport function createServer(): McpServer {\n const server = new McpServer({\n name: 'hareru-ui',\n version: pkg.version,\n });\n\n registerResources(server);\n registerTools(server);\n registerPrompts(server);\n\n return server;\n}\n\nexport async function startServer(): Promise<void> {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Hareru UI MCP server started (stdio)');\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { loadConsumerRules, loadRegistry, loadSchema } from './utils.js';\n\nfunction promptError(message: string) {\n return {\n messages: [\n {\n role: 'user' as const,\n content: { type: 'text' as const, text: `Error: ${message}` },\n },\n ],\n };\n}\n\nexport function registerPrompts(server: McpServer): void {\n server.prompt(\n 'create-ui',\n 'Generate a UI component using Hareru UI design system',\n {\n description: z\n .string()\n .describe(\n 'What the component should do (e.g. \"A settings form with name and email fields\")',\n ),\n framework: z.string().optional().describe('Target framework: react (default)'),\n },\n async ({ description, framework }) => {\n let registry: ReturnType<typeof loadRegistry>;\n let schema: ReturnType<typeof loadSchema>;\n try {\n registry = loadRegistry();\n schema = loadSchema();\n } catch (err) {\n return promptError(err instanceof Error ? err.message : String(err));\n }\n\n const componentList = registry.components\n .map((c) => {\n const variants = c.variants ?? [];\n const variantInfo =\n variants.length > 0\n ? ` [${variants.flatMap((v) => Object.entries(v.variants).map(([k, opts]) => `${k}(${opts.join('|')})`)).join(', ')}]`\n : '';\n const desc = c.description ? ` — ${c.description}` : '';\n return `- ${c.name}${variantInfo}${desc}`;\n })\n .join('\\n');\n\n const bundles = registry.taskBundles ?? [];\n const bundleList =\n bundles.length > 0\n ? bundles\n .map((b) => `- ${b.name}: ${b.description} (${b.components.length} components)`)\n .join('\\n')\n : '';\n\n const cssVars = schema.properties.cssVariables.items.enum.slice(0, 20).join(', ');\n const fw = framework ?? 'react';\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `You are a UI developer using the Hareru UI design system (${fw}).\n\n## Available Components\n\n${componentList}\n\n## Design Token CSS Variables (sample)\n\n${cssVars}, ...\n\n## Rules\n\n1. Import components from '@hareru/ui'. For CSS setup, refer to the consumer-rules (standalone: '@hareru/ui/styles.css', portable: '@hareru/tokens/css' + '@hareru/ui/styles/components.css')\n2. Use only semantic variant props (e.g. variant=\"default\"), never hardcode CSS values\n3. Use CSS variables (--hui-*) for any custom styling\n4. All components support forwardRef\n5. Use BEM class naming (hui-*) if adding custom classes\n6. Colors use OKLCH format\n\n## Task\n\n${description}\n${bundleList ? `\\n## Available Bundles\\n\\n${bundleList}\\n` : ''}\nGenerate a complete ${fw} component that fulfills this requirement.`,\n },\n },\n ],\n };\n },\n );\n\n server.prompt(\n 'create-ui-tailwind',\n 'Generate a UI component mixing Hareru UI and Tailwind CSS with Cascade Layer guidance',\n {\n description: z\n .string()\n .describe(\n 'What the component should do (e.g. \"A dashboard card with Tailwind layout and Hareru UI buttons\")',\n ),\n },\n async ({ description }) => {\n let registry: ReturnType<typeof loadRegistry>;\n try {\n registry = loadRegistry();\n } catch (err) {\n return promptError(err instanceof Error ? err.message : String(err));\n }\n\n const componentList = registry.components\n .map((c) => {\n const desc = c.description ? ` — ${c.description}` : '';\n return `- ${c.name}${desc}`;\n })\n .join('\\n');\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `You are a UI developer using Hareru UI + Tailwind CSS v4 together.\n\n## Cascade Layer Order\n\nDeclare this layer order at the top of your CSS entry point:\n\n\\`\\`\\`css\n@layer theme, base, hui, components, utilities;\n@import 'tailwindcss';\n@import '@hareru/tokens/css';\n@import '@hareru/ui/styles/components.layer.css';\n\\`\\`\\`\n\n- Hareru components live in \\`@layer hui\\` — below Tailwind \\`utilities\\`\n- Tailwind utility classes (e.g. \\`flex\\`, \\`gap-4\\`, \\`p-2\\`) can safely override Hareru layout\n- Never use Tailwind classes to override Hareru component internals (colors, border-radius, shadows) — use \\`--hui-*\\` CSS variables instead\n\n## Mixing Classes Example\n\n\\`\\`\\`tsx\n{/* Tailwind for layout, Hareru for components */}\n<div className=\"flex gap-4 p-6\">\n <Card className=\"flex-1\">\n <CardHeader>Title</CardHeader>\n <CardContent>\n <Button variant=\"default\">Action</Button>\n </CardContent>\n </Card>\n</div>\n\\`\\`\\`\n\n## Available Components\n\n${componentList}\n\n## Rules\n\n1. Import components from \\`@hareru/ui\\`\n2. Use Tailwind utilities for layout (flex, grid, gap, padding, margin)\n3. Use Hareru components for interactive UI elements (Button, Input, Card, Dialog)\n4. Use \\`--hui-*\\` CSS variables for theming — do not override with Tailwind color classes\n5. Use BEM class naming (\\`hui-*\\`) if adding custom component styles\n6. Colors are OKLCH format\n\n## Task\n\n${description}\n\nGenerate a complete React component that combines Tailwind layout utilities with Hareru UI components.`,\n },\n },\n ],\n };\n },\n );\n\n server.prompt(\n 'consumer-rules',\n 'Get the rules for using Hareru UI in your project',\n {},\n async () => {\n let rules: ReturnType<typeof loadConsumerRules>;\n try {\n rules = loadConsumerRules();\n } catch (err) {\n return promptError(err instanceof Error ? err.message : String(err));\n }\n\n const CODE_BLOCK_SECTIONS = new Set(['cssImports']);\n\n const rulesSections = Object.entries(rules.rules)\n .map(([key, section]) => {\n const ruleList = section.rules.map((r) => `- ${r}`).join('\\n');\n const examples = Object.entries(section.examples)\n .map(([label, code]) =>\n CODE_BLOCK_SECTIONS.has(key)\n ? `**${label}:**\\n\\`\\`\\`css\\n${code}\\n\\`\\`\\``\n : ` ${label}: ${code}`,\n )\n .join('\\n');\n return `### ${key}\\n${section.description}\\n\\n${ruleList}\\n\\nExamples:\\n${examples}`;\n })\n .join('\\n\\n');\n\n const tokenRef = Object.entries(rules.tokenQuickReference)\n .map(([category, pattern]) => `- ${category}: ${pattern}`)\n .join('\\n');\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `# Hareru UI Consumer Rules (v${rules.version})\n\nThese rules apply when using Hareru UI in any project.\n\n## Rules\n\n${rulesSections}\n\n## Token Quick Reference\n\n${tokenRef}`,\n },\n },\n ],\n };\n },\n );\n}\n","export {\n loadTokens,\n loadSchema,\n loadRegistry,\n loadComponentSchema,\n loadConsumerRules,\n CSS_MODES,\n CSS_MODE_DESCRIPTIONS,\n recommendCssMode,\n buildSlotTree,\n} from '@hareru/registry';\n\nexport type {\n TokensJSON,\n SchemaJSON,\n ComponentRegistryJSON,\n ComponentEntry,\n TaskBundle,\n ComponentGroup,\n TokenCategory,\n VariantDef,\n CustomPropDef,\n PropDef,\n StateDef,\n A11yDef,\n SlotDef,\n SlotRole,\n ExampleDef,\n ComponentSchemaJSON,\n ConsumerRulesJSON,\n CssMode,\n CssModeContext,\n} from '@hareru/registry';\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport {\n loadComponentSchema,\n loadConsumerRules,\n loadRegistry,\n loadSchema,\n loadTokens,\n} from './utils.js';\n\nfunction errorMessage(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n\nfunction resourceError(uri: URL, err: unknown) {\n return {\n contents: [\n {\n uri: uri.href,\n text: JSON.stringify({ error: errorMessage(err) }),\n },\n ],\n };\n}\n\nexport function registerResources(server: McpServer): void {\n // Pre-fetch description values (failures don't block server startup)\n let tokenCount: number | undefined;\n let componentCount: number | undefined;\n let bundleCount: number | undefined;\n try {\n tokenCount = loadSchema().properties.tokenCount.const;\n } catch {\n /* fallback description */\n }\n try {\n const reg = loadRegistry();\n componentCount = reg.componentCount;\n bundleCount = reg.taskBundles?.length ?? 0;\n } catch {\n /* fallback description */\n }\n\n server.resource(\n 'tokens',\n 'hareru-ui://tokens',\n {\n description:\n tokenCount !== undefined\n ? `DTCG design tokens (light/dark themes, ${tokenCount} CSS custom properties)`\n : 'DTCG design tokens (light/dark themes)',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n return { contents: [{ uri: uri.href, text: JSON.stringify(loadTokens(), null, 2) }] };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n\n server.resource(\n 'tokens-schema',\n 'hareru-ui://tokens/schema',\n {\n description: 'JSON Schema for design tokens — CSS variable enums and type constraints',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n return { contents: [{ uri: uri.href, text: JSON.stringify(loadSchema(), null, 2) }] };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n\n server.resource(\n 'components',\n 'hareru-ui://components',\n {\n description:\n componentCount !== undefined\n ? `Component registry — ${componentCount} components with CVA variants, Props interfaces, and slot contracts`\n : 'Component registry — components with CVA variants, Props interfaces, and slot contracts',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n return { contents: [{ uri: uri.href, text: JSON.stringify(loadRegistry(), null, 2) }] };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n\n server.resource(\n 'bundles',\n 'hareru-ui://bundles',\n {\n description:\n bundleCount !== undefined\n ? `Task bundles — ${bundleCount} curated component sets for common UI patterns`\n : 'Task bundles — curated component sets for common UI patterns',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n const registry = loadRegistry();\n return {\n contents: [{ uri: uri.href, text: JSON.stringify(registry.taskBundles ?? [], null, 2) }],\n };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n\n server.resource(\n 'components-schema',\n 'hareru-ui://components/schema',\n {\n description: 'JSON Schema for the component registry',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n return {\n contents: [{ uri: uri.href, text: JSON.stringify(loadComponentSchema(), null, 2) }],\n };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n\n server.resource(\n 'consumer-rules',\n 'hareru-ui://rules/consumer',\n {\n description:\n 'Consumer rules for AI agents — import patterns, styling rules, and token reference',\n mimeType: 'application/json',\n },\n async (uri) => {\n try {\n return {\n contents: [{ uri: uri.href, text: JSON.stringify(loadConsumerRules(), null, 2) }],\n };\n } catch (err) {\n return resourceError(uri, err);\n }\n },\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport {\n CSS_MODES,\n CSS_MODE_DESCRIPTIONS,\n buildSlotTree,\n loadRegistry,\n loadSchema,\n recommendCssMode,\n} from './utils.js';\nimport type { ComponentEntry } from './utils.js';\n\nfunction safeLoad<T>(\n loader: () => T,\n label: string,\n): { data: T; error?: undefined } | { data?: undefined; error: string } {\n try {\n return { data: loader() };\n } catch (err) {\n return { error: `${label}: ${err instanceof Error ? err.message : String(err)}` };\n }\n}\n\nfunction mcpError(message: string) {\n return { content: [{ type: 'text' as const, text: message }], isError: true };\n}\n\nfunction escPipe(s: string): string {\n return s.replace(/\\|/g, '\\\\|');\n}\n\nfunction formatVariantsTable(entry: ComponentEntry): string {\n const variants = entry.variants ?? [];\n if (variants.length === 0) return 'No CVA variants defined.';\n\n const lines: string[] = ['| Variant | Options | Default |', '|---------|---------|---------|'];\n for (const v of variants) {\n for (const [key, options] of Object.entries(v.variants)) {\n const defaultVal = v.defaultVariants[key] ?? '-';\n lines.push(\n `| ${escPipe(key)} | ${options.map(escPipe).join(', ')} | ${escPipe(defaultVal)} |`,\n );\n }\n }\n return lines.join('\\n');\n}\n\nfunction formatUsageMarkdown(entry: ComponentEntry): string {\n const parts: string[] = [];\n\n parts.push(`# ${entry.displayName}`);\n parts.push('');\n\n // Description (Phase 3A)\n parts.push(entry.description);\n parts.push('');\n\n // AI Guidance (Phase 3A)\n if (entry.aiHint) {\n parts.push('## AI Guidance');\n parts.push('');\n parts.push(entry.aiHint);\n parts.push('');\n }\n\n // Import section\n parts.push('## Import');\n parts.push('');\n parts.push('```tsx');\n const subs = entry.subcomponents ?? [];\n const allNames = [entry.name, ...subs];\n parts.push(`import { ${allNames.join(', ')} } from '@hareru/ui';`);\n parts.push('```');\n parts.push('');\n\n // CSS section (registry-driven)\n parts.push('## CSS');\n parts.push('');\n parts.push('**Standalone:**');\n parts.push('```css');\n parts.push(`@import '@hareru/ui/styles.css';`);\n parts.push('```');\n parts.push('');\n parts.push('**Per-component:**');\n parts.push('```css');\n parts.push(`@import '@hareru/tokens/css';`);\n for (const dep of entry.requiredCssArtifacts ?? []) {\n parts.push(`@import '@hareru/ui/${dep}';`);\n }\n parts.push(`@import '@hareru/ui/${entry.cssArtifact}';`);\n parts.push('```');\n parts.push('');\n\n // Structure (Phase 3D) — placed after CSS, before Variants in markdown doc format\n const slotTree = buildSlotTree(\n entry.name,\n entry.slots,\n entry.name === 'Table' ? ['TableRow is also valid inside TableHeader.'] : undefined,\n );\n if (slotTree) {\n parts.push('## Structure');\n parts.push('');\n parts.push('```text');\n parts.push(slotTree);\n parts.push('```');\n parts.push('');\n }\n\n const variants = entry.variants ?? [];\n const props = entry.props ?? [];\n\n if (variants.length > 0) {\n parts.push('## Variants');\n parts.push('');\n parts.push(formatVariantsTable(entry));\n parts.push('');\n }\n\n if (props.length > 0) {\n parts.push('## Props');\n parts.push('');\n for (const prop of props) {\n if (prop.extends) {\n parts.push(`- **${prop.name}** extends \\`${prop.extends}\\``);\n } else {\n parts.push(`- **${prop.name}**`);\n }\n }\n parts.push('');\n }\n\n // States (Phase 3C)\n const states = entry.states ?? [];\n if (states.length > 0) {\n parts.push('## States');\n parts.push('');\n parts.push('| State | Type | Values | Default |');\n parts.push('|-------|------|--------|---------|');\n for (const s of states) {\n const values = s.type === 'enum' ? s.values.map(escPipe).join(', ') : '-';\n const def = s.type === 'enum' && s.defaultValue ? escPipe(s.defaultValue) : '-';\n parts.push(`| ${escPipe(s.name)} | ${s.type} | ${values} | ${def} |`);\n }\n parts.push('');\n }\n\n // Accessibility (Phase 3C)\n const a11y = entry.a11y;\n if (a11y) {\n parts.push('## Accessibility');\n parts.push('');\n if (a11y.roles?.length) parts.push(`- Roles: ${a11y.roles.join(', ')}`);\n if (a11y.ariaAttributes?.length) parts.push(`- ARIA: ${a11y.ariaAttributes.join(', ')}`);\n if (a11y.semanticElements?.length)\n parts.push(`- Semantic elements: ${a11y.semanticElements.join(', ')}`);\n if (a11y.keyboardInteractions?.length)\n parts.push(`- Keyboard: ${a11y.keyboardInteractions.join('; ')}`);\n if (a11y.liveRegion) parts.push('- Live region: yes');\n if (a11y.notes) parts.push(`- Notes: ${a11y.notes}`);\n parts.push('');\n }\n\n // Also Consider (Phase 3A)\n if (entry.peerComponents) {\n parts.push('## Also Consider');\n parts.push('');\n for (const peer of entry.peerComponents) {\n parts.push(`- ${peer}`);\n }\n parts.push('');\n }\n\n // Example (Phase 3C: prefer canonical examples from manifest)\n const examples = entry.examples ?? [];\n if (examples.length > 0) {\n parts.push('## Example');\n parts.push('');\n for (const ex of examples) {\n parts.push(`### ${ex.title}`);\n parts.push('');\n parts.push('```tsx');\n parts.push(ex.code);\n parts.push('```');\n parts.push('');\n }\n } else {\n // Fallback: auto-generated example\n parts.push('## Example');\n parts.push('');\n parts.push('```tsx');\n if (variants.length > 0) {\n const firstVariant = variants[0];\n const propsStr = Object.entries(firstVariant.defaultVariants)\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(' ');\n parts.push(`<${entry.name} ${propsStr}>Content</${entry.name}>`);\n } else if (subs.length > 0) {\n parts.push(`<${entry.name}>`);\n for (const sub of subs) {\n parts.push(` <${sub}>Content</${sub}>`);\n }\n parts.push(`</${entry.name}>`);\n } else {\n parts.push(`<${entry.name}>Content</${entry.name}>`);\n }\n parts.push('```');\n }\n\n return parts.join('\\n');\n}\n\nexport function registerTools(server: McpServer): void {\n server.tool(\n 'get-component-usage',\n 'Get usage documentation for a Hareru UI component — import, structure, variants, props, states, accessibility, slots, and examples',\n { componentName: z.string().describe('Component name (e.g. \"Button\", \"Card\", \"Alert\")') },\n async ({ componentName }) => {\n const result = safeLoad(loadRegistry, 'Component registry');\n if (result.error) return mcpError(result.error);\n const registry = result.data;\n const entry = registry.components.find(\n (c) => c.name.toLowerCase() === componentName.toLowerCase(),\n );\n\n if (!entry) {\n const available = registry.components.map((c) => c.name).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Component \"${componentName}\" not found. Available components: ${available}`,\n },\n ],\n isError: true,\n };\n }\n\n return {\n content: [{ type: 'text' as const, text: formatUsageMarkdown(entry) }],\n };\n },\n );\n\n server.tool(\n 'get-bundle-usage',\n 'Get usage documentation for a Hareru UI task bundle — components, CSS imports, and token categories',\n { bundleName: z.string().describe('Bundle name (e.g. \"agent-chat-shell\", \"form-basics\")') },\n async ({ bundleName }) => {\n const result = safeLoad(loadRegistry, 'Component registry');\n if (result.error) return mcpError(result.error);\n const registry = result.data;\n const bundles = registry.taskBundles ?? [];\n const bundle = bundles.find((b) => b.name.toLowerCase() === bundleName.toLowerCase());\n\n if (!bundle) {\n const available = bundles.map((b) => b.name).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Bundle \"${bundleName}\" not found. Available bundles: ${available}`,\n },\n ],\n isError: true,\n };\n }\n\n const componentMap = new Map(registry.components.map((c) => [c.name, c]));\n\n const parts: string[] = [];\n parts.push(`# Bundle: ${bundle.name}`);\n parts.push('');\n parts.push(bundle.description);\n parts.push('');\n\n // Import section — expand subcomponents so the import is copy-pasteable\n const allImports: string[] = [];\n for (const compName of bundle.components) {\n const comp = componentMap.get(compName);\n allImports.push(compName);\n if (comp?.subcomponents) {\n allImports.push(...comp.subcomponents);\n }\n }\n parts.push('## Import');\n parts.push('');\n parts.push('```tsx');\n parts.push(`import { ${allImports.join(', ')} } from '@hareru/ui';`);\n parts.push('```');\n parts.push('');\n\n // CSS section\n parts.push('## CSS');\n parts.push('');\n parts.push('**Standalone:**');\n parts.push('```css');\n parts.push(`@import '@hareru/ui/styles.css';`);\n parts.push('```');\n parts.push('');\n parts.push('**Per-component:**');\n parts.push('```css');\n parts.push(`@import '@hareru/tokens/css';`);\n for (const artifact of bundle.cssArtifacts) {\n parts.push(`@import '@hareru/ui/${artifact}';`);\n }\n parts.push('```');\n parts.push('');\n\n // Token categories\n parts.push('## Token Categories');\n parts.push('');\n parts.push(bundle.tokenCategories.join(', '));\n parts.push('');\n\n // Components detail\n parts.push('## Components');\n parts.push('');\n for (const compName of bundle.components) {\n const comp = componentMap.get(compName);\n if (comp) {\n parts.push(`- **${comp.name}** — ${comp.description}`);\n } else {\n parts.push(`- **${compName}**`);\n }\n }\n parts.push('');\n\n return {\n content: [{ type: 'text' as const, text: parts.join('\\n') }],\n };\n },\n );\n\n server.tool(\n 'validate-token-value',\n 'Validate a CSS token value against the Hareru UI design token schema',\n {\n tokenType: z\n .string()\n .describe(\n 'Token type: color, dimension, fontFamily, fontWeight, duration, number, shadow, typography, cubicBezier',\n ),\n value: z.string().describe('The value to validate (e.g. \"oklch(0.5 0.2 250)\")'),\n },\n async ({ tokenType, value }) => {\n const result = safeLoad(loadSchema, 'Token schema');\n if (result.error) return mcpError(result.error);\n const schema = result.data;\n const constraint =\n schema.properties.typeConstraints.properties[\n tokenType as keyof typeof schema.properties.typeConstraints.properties\n ];\n\n if (!constraint) {\n const availableTypes = Object.keys(schema.properties.typeConstraints.properties).join(', ');\n return {\n content: [\n {\n type: 'text' as const,\n text: `Unknown token type \"${tokenType}\". Available types: ${availableTypes}`,\n },\n ],\n isError: true,\n };\n }\n\n if (!constraint.pattern) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Valid — token type \"${tokenType}\" has no pattern constraint (any ${constraint.type ?? 'string'} value accepted).`,\n },\n ],\n };\n }\n\n let regex: RegExp;\n try {\n regex = new RegExp(constraint.pattern);\n } catch {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Error — invalid pattern for token type \"${tokenType}\": ${constraint.pattern}`,\n },\n ],\n isError: true,\n };\n }\n\n const isValid = regex.test(value);\n\n if (isValid) {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Valid — \"${value}\" matches the ${tokenType} pattern: ${constraint.pattern}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `Invalid — \"${value}\" does not match the ${tokenType} pattern.\\nExpected: ${constraint.pattern}\\nDescription: ${constraint.description ?? tokenType}`,\n },\n ],\n };\n },\n );\n\n server.tool(\n 'recommend-css-mode',\n 'Recommend the best CSS import mode for a Hareru UI project based on project context',\n {\n hasTailwind: z.boolean().describe('Whether Tailwind CSS is detected in the project'),\n componentCount: z\n .number()\n .int()\n .min(0)\n .describe('Number of Hareru components used in the project'),\n hasExistingReset: z\n .boolean()\n .optional()\n .describe(\n 'Whether the project already has a CSS reset or framework (e.g. Bootstrap, Pico CSS)',\n ),\n },\n async ({ hasTailwind, componentCount, hasExistingReset }) => {\n const result = recommendCssMode({ hasTailwind, componentCount, hasExistingReset });\n\n const allModes = CSS_MODES.map((m) => {\n const marker = m === result.mode ? ' ← recommended' : '';\n return `- **${m}**: ${CSS_MODE_DESCRIPTIONS[m]}${marker}`;\n }).join('\\n');\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `## Recommended CSS Mode: \\`${result.mode}\\`\\n\\n${result.reason}\\n\\n## All Modes\\n\\n${allModes}`,\n },\n ],\n };\n },\n );\n\n server.tool(\n 'list-components-by-group',\n 'List Hareru UI components filtered by group',\n {\n group: z\n .enum([\n 'core',\n 'form',\n 'layout',\n 'overlay',\n 'navigation',\n 'feedback',\n 'data-display',\n 'agent',\n 'di-domain',\n ])\n .describe('Component group to filter by'),\n },\n async ({ group }) => {\n const result = safeLoad(loadRegistry, 'Component registry');\n if (result.error) return mcpError(result.error);\n const registry = result.data;\n const filtered = registry.components.filter((c) => c.group === group);\n\n if (filtered.length === 0) {\n const groups = [...new Set(registry.components.map((c) => c.group))].sort();\n return {\n content: [\n {\n type: 'text' as const,\n text: `No components in group \"${group}\". Available groups: ${groups.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n const lines = filtered\n .map((c) => {\n const variants = c.variants ?? [];\n const variantInfo =\n variants.length > 0\n ? ` [${variants.flatMap((v) => Object.entries(v.variants).map(([k, opts]) => `${k}(${opts.join('|')})`)).join(', ')}]`\n : '';\n return `- **${c.name}**${variantInfo} — ${c.description}`;\n })\n .join('\\n');\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `## ${group} (${filtered.length} components)\\n\\n${lines}`,\n },\n ],\n };\n },\n );\n}\n"],"mappings":"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","names":["z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hareru/mcp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "MCP server for Hareru UI design system — exposes tokens, schema, and component registry to AI agents",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -39,7 +39,7 @@
39
39
  "dependencies": {
40
40
  "@modelcontextprotocol/sdk": "^1.12.0",
41
41
  "zod": "^3.23.0",
42
- "@hareru/registry": "0.4.1"
42
+ "@hareru/registry": "0.4.2"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.0.0",