@forgespace/branding-mcp 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/.env.example +3 -0
  2. package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  3. package/.github/workflows/ci.yml +73 -0
  4. package/.github/workflows/release-automation.yml +56 -0
  5. package/.github/workflows/security-scan.yml +37 -0
  6. package/.gitleaks.toml +14 -0
  7. package/.prettierrc.json +10 -0
  8. package/CHANGELOG.md +66 -0
  9. package/CONTRIBUTING.md +203 -0
  10. package/LICENSE +21 -0
  11. package/README.md +105 -0
  12. package/data/README.md +13 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +49 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/branding-core/ai/brand-interpreter.d.ts +5 -0
  18. package/dist/lib/branding-core/ai/brand-interpreter.d.ts.map +1 -0
  19. package/dist/lib/branding-core/ai/brand-interpreter.js +16 -0
  20. package/dist/lib/branding-core/ai/brand-interpreter.js.map +1 -0
  21. package/dist/lib/branding-core/ai/claude-interpreter.d.ts +5 -0
  22. package/dist/lib/branding-core/ai/claude-interpreter.d.ts.map +1 -0
  23. package/dist/lib/branding-core/ai/claude-interpreter.js +55 -0
  24. package/dist/lib/branding-core/ai/claude-interpreter.js.map +1 -0
  25. package/dist/lib/branding-core/ai/intent-applier.d.ts +4 -0
  26. package/dist/lib/branding-core/ai/intent-applier.d.ts.map +1 -0
  27. package/dist/lib/branding-core/ai/intent-applier.js +29 -0
  28. package/dist/lib/branding-core/ai/intent-applier.js.map +1 -0
  29. package/dist/lib/branding-core/ai/keyword-interpreter.d.ts +4 -0
  30. package/dist/lib/branding-core/ai/keyword-interpreter.d.ts.map +1 -0
  31. package/dist/lib/branding-core/ai/keyword-interpreter.js +85 -0
  32. package/dist/lib/branding-core/ai/keyword-interpreter.js.map +1 -0
  33. package/dist/lib/branding-core/ai/prompts.d.ts +4 -0
  34. package/dist/lib/branding-core/ai/prompts.d.ts.map +1 -0
  35. package/dist/lib/branding-core/ai/prompts.js +79 -0
  36. package/dist/lib/branding-core/ai/prompts.js.map +1 -0
  37. package/dist/lib/branding-core/ai/types.d.ts +27 -0
  38. package/dist/lib/branding-core/ai/types.d.ts.map +1 -0
  39. package/dist/lib/branding-core/ai/types.js +2 -0
  40. package/dist/lib/branding-core/ai/types.js.map +1 -0
  41. package/dist/lib/branding-core/documents/html-generator.d.ts +3 -0
  42. package/dist/lib/branding-core/documents/html-generator.d.ts.map +1 -0
  43. package/dist/lib/branding-core/documents/html-generator.js +31 -0
  44. package/dist/lib/branding-core/documents/html-generator.js.map +1 -0
  45. package/dist/lib/branding-core/documents/pdf-generator.d.ts +3 -0
  46. package/dist/lib/branding-core/documents/pdf-generator.d.ts.map +1 -0
  47. package/dist/lib/branding-core/documents/pdf-generator.js +20 -0
  48. package/dist/lib/branding-core/documents/pdf-generator.js.map +1 -0
  49. package/dist/lib/branding-core/exporters/css-variables.d.ts +3 -0
  50. package/dist/lib/branding-core/exporters/css-variables.d.ts.map +1 -0
  51. package/dist/lib/branding-core/exporters/css-variables.js +62 -0
  52. package/dist/lib/branding-core/exporters/css-variables.js.map +1 -0
  53. package/dist/lib/branding-core/exporters/design-tokens.d.ts +3 -0
  54. package/dist/lib/branding-core/exporters/design-tokens.d.ts.map +1 -0
  55. package/dist/lib/branding-core/exporters/design-tokens.js +75 -0
  56. package/dist/lib/branding-core/exporters/design-tokens.js.map +1 -0
  57. package/dist/lib/branding-core/exporters/figma-tokens.d.ts +9 -0
  58. package/dist/lib/branding-core/exporters/figma-tokens.d.ts.map +1 -0
  59. package/dist/lib/branding-core/exporters/figma-tokens.js +69 -0
  60. package/dist/lib/branding-core/exporters/figma-tokens.js.map +1 -0
  61. package/dist/lib/branding-core/exporters/react-theme.d.ts +3 -0
  62. package/dist/lib/branding-core/exporters/react-theme.d.ts.map +1 -0
  63. package/dist/lib/branding-core/exporters/react-theme.js +61 -0
  64. package/dist/lib/branding-core/exporters/react-theme.js.map +1 -0
  65. package/dist/lib/branding-core/exporters/sass-variables.d.ts +3 -0
  66. package/dist/lib/branding-core/exporters/sass-variables.d.ts.map +1 -0
  67. package/dist/lib/branding-core/exporters/sass-variables.js +65 -0
  68. package/dist/lib/branding-core/exporters/sass-variables.js.map +1 -0
  69. package/dist/lib/branding-core/exporters/tailwind-preset.d.ts +3 -0
  70. package/dist/lib/branding-core/exporters/tailwind-preset.d.ts.map +1 -0
  71. package/dist/lib/branding-core/exporters/tailwind-preset.js +55 -0
  72. package/dist/lib/branding-core/exporters/tailwind-preset.js.map +1 -0
  73. package/dist/lib/branding-core/generators/border-system.d.ts +3 -0
  74. package/dist/lib/branding-core/generators/border-system.d.ts.map +1 -0
  75. package/dist/lib/branding-core/generators/border-system.js +37 -0
  76. package/dist/lib/branding-core/generators/border-system.js.map +1 -0
  77. package/dist/lib/branding-core/generators/color-palette.d.ts +7 -0
  78. package/dist/lib/branding-core/generators/color-palette.d.ts.map +1 -0
  79. package/dist/lib/branding-core/generators/color-palette.js +117 -0
  80. package/dist/lib/branding-core/generators/color-palette.js.map +1 -0
  81. package/dist/lib/branding-core/generators/favicon-generator.d.ts +3 -0
  82. package/dist/lib/branding-core/generators/favicon-generator.d.ts.map +1 -0
  83. package/dist/lib/branding-core/generators/favicon-generator.js +23 -0
  84. package/dist/lib/branding-core/generators/favicon-generator.js.map +1 -0
  85. package/dist/lib/branding-core/generators/gradient-system.d.ts +3 -0
  86. package/dist/lib/branding-core/generators/gradient-system.d.ts.map +1 -0
  87. package/dist/lib/branding-core/generators/gradient-system.js +74 -0
  88. package/dist/lib/branding-core/generators/gradient-system.js.map +1 -0
  89. package/dist/lib/branding-core/generators/logo-generator.d.ts +4 -0
  90. package/dist/lib/branding-core/generators/logo-generator.d.ts.map +1 -0
  91. package/dist/lib/branding-core/generators/logo-generator.js +130 -0
  92. package/dist/lib/branding-core/generators/logo-generator.js.map +1 -0
  93. package/dist/lib/branding-core/generators/motion-system.d.ts +3 -0
  94. package/dist/lib/branding-core/generators/motion-system.d.ts.map +1 -0
  95. package/dist/lib/branding-core/generators/motion-system.js +91 -0
  96. package/dist/lib/branding-core/generators/motion-system.js.map +1 -0
  97. package/dist/lib/branding-core/generators/og-image-generator.d.ts +3 -0
  98. package/dist/lib/branding-core/generators/og-image-generator.d.ts.map +1 -0
  99. package/dist/lib/branding-core/generators/og-image-generator.js +72 -0
  100. package/dist/lib/branding-core/generators/og-image-generator.js.map +1 -0
  101. package/dist/lib/branding-core/generators/shadow-system.d.ts +3 -0
  102. package/dist/lib/branding-core/generators/shadow-system.d.ts.map +1 -0
  103. package/dist/lib/branding-core/generators/shadow-system.js +44 -0
  104. package/dist/lib/branding-core/generators/shadow-system.js.map +1 -0
  105. package/dist/lib/branding-core/generators/spacing-scale.d.ts +3 -0
  106. package/dist/lib/branding-core/generators/spacing-scale.d.ts.map +1 -0
  107. package/dist/lib/branding-core/generators/spacing-scale.js +27 -0
  108. package/dist/lib/branding-core/generators/spacing-scale.js.map +1 -0
  109. package/dist/lib/branding-core/generators/typography-system.d.ts +3 -0
  110. package/dist/lib/branding-core/generators/typography-system.d.ts.map +1 -0
  111. package/dist/lib/branding-core/generators/typography-system.js +121 -0
  112. package/dist/lib/branding-core/generators/typography-system.js.map +1 -0
  113. package/dist/lib/branding-core/index.d.ts +24 -0
  114. package/dist/lib/branding-core/index.d.ts.map +1 -0
  115. package/dist/lib/branding-core/index.js +22 -0
  116. package/dist/lib/branding-core/index.js.map +1 -0
  117. package/dist/lib/branding-core/validators/brand-consistency.d.ts +3 -0
  118. package/dist/lib/branding-core/validators/brand-consistency.d.ts.map +1 -0
  119. package/dist/lib/branding-core/validators/brand-consistency.js +70 -0
  120. package/dist/lib/branding-core/validators/brand-consistency.js.map +1 -0
  121. package/dist/lib/branding-core/validators/contrast-checker.d.ts +3 -0
  122. package/dist/lib/branding-core/validators/contrast-checker.d.ts.map +1 -0
  123. package/dist/lib/branding-core/validators/contrast-checker.js +33 -0
  124. package/dist/lib/branding-core/validators/contrast-checker.js.map +1 -0
  125. package/dist/lib/branding-core/validators/token-schema.d.ts +10 -0
  126. package/dist/lib/branding-core/validators/token-schema.d.ts.map +1 -0
  127. package/dist/lib/branding-core/validators/token-schema.js +43 -0
  128. package/dist/lib/branding-core/validators/token-schema.js.map +1 -0
  129. package/dist/lib/config.d.ts +7 -0
  130. package/dist/lib/config.d.ts.map +1 -0
  131. package/dist/lib/config.js +8 -0
  132. package/dist/lib/config.js.map +1 -0
  133. package/dist/lib/logger.d.ts +3 -0
  134. package/dist/lib/logger.d.ts.map +1 -0
  135. package/dist/lib/logger.js +10 -0
  136. package/dist/lib/logger.js.map +1 -0
  137. package/dist/lib/types.d.ts +208 -0
  138. package/dist/lib/types.d.ts.map +1 -0
  139. package/dist/lib/types.js +2 -0
  140. package/dist/lib/types.js.map +1 -0
  141. package/dist/resources/brand-knowledge.d.ts +3 -0
  142. package/dist/resources/brand-knowledge.d.ts.map +1 -0
  143. package/dist/resources/brand-knowledge.js +53 -0
  144. package/dist/resources/brand-knowledge.js.map +1 -0
  145. package/dist/resources/brand-templates.d.ts +3 -0
  146. package/dist/resources/brand-templates.d.ts.map +1 -0
  147. package/dist/resources/brand-templates.js +68 -0
  148. package/dist/resources/brand-templates.js.map +1 -0
  149. package/dist/tools/create-brand-guidelines.d.ts +3 -0
  150. package/dist/tools/create-brand-guidelines.d.ts.map +1 -0
  151. package/dist/tools/create-brand-guidelines.js +85 -0
  152. package/dist/tools/create-brand-guidelines.js.map +1 -0
  153. package/dist/tools/export-design-tokens.d.ts +3 -0
  154. package/dist/tools/export-design-tokens.d.ts.map +1 -0
  155. package/dist/tools/export-design-tokens.js +37 -0
  156. package/dist/tools/export-design-tokens.js.map +1 -0
  157. package/dist/tools/generate-brand-assets.d.ts +3 -0
  158. package/dist/tools/generate-brand-assets.d.ts.map +1 -0
  159. package/dist/tools/generate-brand-assets.js +37 -0
  160. package/dist/tools/generate-brand-assets.js.map +1 -0
  161. package/dist/tools/generate-brand-identity.d.ts +3 -0
  162. package/dist/tools/generate-brand-identity.d.ts.map +1 -0
  163. package/dist/tools/generate-brand-identity.js +73 -0
  164. package/dist/tools/generate-brand-identity.js.map +1 -0
  165. package/dist/tools/generate-color-palette.d.ts +3 -0
  166. package/dist/tools/generate-color-palette.d.ts.map +1 -0
  167. package/dist/tools/generate-color-palette.js +33 -0
  168. package/dist/tools/generate-color-palette.js.map +1 -0
  169. package/dist/tools/generate-typography-system.d.ts +3 -0
  170. package/dist/tools/generate-typography-system.d.ts.map +1 -0
  171. package/dist/tools/generate-typography-system.js +28 -0
  172. package/dist/tools/generate-typography-system.js.map +1 -0
  173. package/dist/tools/refine-brand-element.d.ts +3 -0
  174. package/dist/tools/refine-brand-element.d.ts.map +1 -0
  175. package/dist/tools/refine-brand-element.js +41 -0
  176. package/dist/tools/refine-brand-element.js.map +1 -0
  177. package/dist/tools/validate-brand-consistency.d.ts +3 -0
  178. package/dist/tools/validate-brand-consistency.d.ts.map +1 -0
  179. package/dist/tools/validate-brand-consistency.js +25 -0
  180. package/dist/tools/validate-brand-consistency.js.map +1 -0
  181. package/docs/API.md +110 -0
  182. package/docs/DATA_SOURCES.md +69 -0
  183. package/docs/INTEGRATION.md +58 -0
  184. package/eslint.config.js +52 -0
  185. package/jest.config.js +40 -0
  186. package/package.json +78 -0
  187. package/src/__tests__/integration/brand-generation.test.ts +84 -0
  188. package/src/__tests__/integration/mcp-server.test.ts +18 -0
  189. package/src/__tests__/unit/ai-interpreter.test.ts +172 -0
  190. package/src/__tests__/unit/border-system.test.ts +77 -0
  191. package/src/__tests__/unit/color-palette.test.ts +161 -0
  192. package/src/__tests__/unit/contrast-checker.test.ts +124 -0
  193. package/src/__tests__/unit/design-tokens.test.ts +184 -0
  194. package/src/__tests__/unit/favicon-generator.test.ts +80 -0
  195. package/src/__tests__/unit/gradient-system.test.ts +122 -0
  196. package/src/__tests__/unit/logo-generator.test.ts +146 -0
  197. package/src/__tests__/unit/motion-system.test.ts +91 -0
  198. package/src/__tests__/unit/og-image-generator.test.ts +115 -0
  199. package/src/__tests__/unit/shadow-system.test.ts +63 -0
  200. package/src/__tests__/unit/spacing-scale.test.ts +60 -0
  201. package/src/__tests__/unit/typography-system.test.ts +71 -0
  202. package/src/index.ts +59 -0
  203. package/src/lib/branding-core/ai/brand-interpreter.ts +30 -0
  204. package/src/lib/branding-core/ai/claude-interpreter.ts +76 -0
  205. package/src/lib/branding-core/ai/intent-applier.ts +59 -0
  206. package/src/lib/branding-core/ai/keyword-interpreter.ts +95 -0
  207. package/src/lib/branding-core/ai/prompts.ts +93 -0
  208. package/src/lib/branding-core/ai/types.ts +36 -0
  209. package/src/lib/branding-core/documents/html-generator.ts +32 -0
  210. package/src/lib/branding-core/documents/pdf-generator.ts +21 -0
  211. package/src/lib/branding-core/exporters/css-variables.ts +71 -0
  212. package/src/lib/branding-core/exporters/design-tokens.ts +86 -0
  213. package/src/lib/branding-core/exporters/figma-tokens.ts +87 -0
  214. package/src/lib/branding-core/exporters/react-theme.ts +69 -0
  215. package/src/lib/branding-core/exporters/sass-variables.ts +74 -0
  216. package/src/lib/branding-core/exporters/tailwind-preset.ts +67 -0
  217. package/src/lib/branding-core/generators/border-system.ts +41 -0
  218. package/src/lib/branding-core/generators/color-palette.ts +147 -0
  219. package/src/lib/branding-core/generators/favicon-generator.ts +33 -0
  220. package/src/lib/branding-core/generators/gradient-system.ts +120 -0
  221. package/src/lib/branding-core/generators/logo-generator.ts +152 -0
  222. package/src/lib/branding-core/generators/motion-system.ts +98 -0
  223. package/src/lib/branding-core/generators/og-image-generator.ts +97 -0
  224. package/src/lib/branding-core/generators/shadow-system.ts +66 -0
  225. package/src/lib/branding-core/generators/spacing-scale.ts +29 -0
  226. package/src/lib/branding-core/generators/typography-system.ts +128 -0
  227. package/src/lib/branding-core/index.ts +28 -0
  228. package/src/lib/branding-core/validators/brand-consistency.ts +79 -0
  229. package/src/lib/branding-core/validators/contrast-checker.ts +37 -0
  230. package/src/lib/branding-core/validators/token-schema.ts +50 -0
  231. package/src/lib/config.ts +13 -0
  232. package/src/lib/logger.ts +12 -0
  233. package/src/lib/types.ts +236 -0
  234. package/src/resources/brand-knowledge.ts +60 -0
  235. package/src/resources/brand-templates.ts +70 -0
  236. package/src/tools/create-brand-guidelines.ts +94 -0
  237. package/src/tools/export-design-tokens.ts +52 -0
  238. package/src/tools/generate-brand-assets.ts +48 -0
  239. package/src/tools/generate-brand-identity.ts +115 -0
  240. package/src/tools/generate-color-palette.ts +43 -0
  241. package/src/tools/generate-typography-system.ts +42 -0
  242. package/src/tools/refine-brand-element.ts +65 -0
  243. package/src/tools/validate-brand-consistency.ts +32 -0
  244. package/tsconfig.json +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerBrandKnowledge(server: McpServer): void;
3
+ //# sourceMappingURL=brand-knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-knowledge.d.ts","sourceRoot":"","sources":["../../src/resources/brand-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6CzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAc9D"}
@@ -0,0 +1,53 @@
1
+ const COLOR_THEORY = {
2
+ harmonies: {
3
+ complementary: 'Colors opposite on the color wheel. High contrast, vibrant.',
4
+ analogous: 'Colors adjacent on the wheel. Harmonious, low contrast.',
5
+ triadic: 'Three colors equally spaced (120 degrees). Balanced and colorful.',
6
+ 'split-complementary': 'Base + two colors adjacent to its complement. Softer contrast.',
7
+ tetradic: 'Four colors forming a rectangle. Rich palette, needs balance.',
8
+ monochromatic: 'Single hue with varied lightness/saturation. Cohesive and elegant.',
9
+ },
10
+ psychology: {
11
+ red: 'Energy, passion, urgency. Use for CTAs and alerts.',
12
+ blue: 'Trust, stability, professionalism. Common in tech and finance.',
13
+ green: 'Growth, health, nature. Used in wellness and sustainability.',
14
+ purple: 'Creativity, luxury, wisdom. Premium and creative brands.',
15
+ orange: 'Enthusiasm, confidence, warmth. Energetic and approachable.',
16
+ yellow: 'Optimism, clarity, warmth. Attention-grabbing accents.',
17
+ black: 'Sophistication, power, elegance. Luxury and editorial.',
18
+ white: 'Simplicity, cleanliness, space. Minimalist design.',
19
+ },
20
+ accessibility: {
21
+ wcagAA: 'Minimum 4.5:1 contrast ratio for normal text',
22
+ wcagAALarge: 'Minimum 3:1 for large text (18px+ or 14px+ bold)',
23
+ wcagAAA: 'Enhanced 7:1 contrast ratio for normal text',
24
+ },
25
+ };
26
+ const TYPOGRAPHY_RULES = {
27
+ scales: {
28
+ 'minor-second': { ratio: 1.067, use: 'Very tight, dense interfaces' },
29
+ 'major-second': { ratio: 1.125, use: 'Compact, functional UIs' },
30
+ 'minor-third': { ratio: 1.2, use: 'General purpose, most common' },
31
+ 'major-third': { ratio: 1.25, use: 'Marketing, editorial content' },
32
+ 'perfect-fourth': { ratio: 1.333, use: 'Bold hierarchies, headlines' },
33
+ 'golden-ratio': { ratio: 1.618, use: 'Dramatic, artistic layouts' },
34
+ },
35
+ pairingPrinciples: [
36
+ 'Contrast serif/sans-serif for heading/body distinction',
37
+ 'Limit to 2-3 fonts maximum per project',
38
+ 'Ensure x-height similarity for optical consistency',
39
+ 'Match historical period and cultural context',
40
+ ],
41
+ };
42
+ export function registerBrandKnowledge(server) {
43
+ server.resource('brand-knowledge', 'brand://knowledge', async () => ({
44
+ contents: [
45
+ {
46
+ uri: 'brand://knowledge',
47
+ text: JSON.stringify({ colorTheory: COLOR_THEORY, typographyRules: TYPOGRAPHY_RULES }, null, 2),
48
+ mimeType: 'application/json',
49
+ },
50
+ ],
51
+ }));
52
+ }
53
+ //# sourceMappingURL=brand-knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-knowledge.js","sourceRoot":"","sources":["../../src/resources/brand-knowledge.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG;IACnB,SAAS,EAAE;QACT,aAAa,EAAE,6DAA6D;QAC5E,SAAS,EAAE,yDAAyD;QACpE,OAAO,EAAE,mEAAmE;QAC5E,qBAAqB,EAAE,gEAAgE;QACvF,QAAQ,EAAE,+DAA+D;QACzE,aAAa,EAAE,oEAAoE;KACpF;IACD,UAAU,EAAE;QACV,GAAG,EAAE,oDAAoD;QACzD,IAAI,EAAE,gEAAgE;QACtE,KAAK,EAAE,8DAA8D;QACrE,MAAM,EAAE,0DAA0D;QAClE,MAAM,EAAE,6DAA6D;QACrE,MAAM,EAAE,wDAAwD;QAChE,KAAK,EAAE,wDAAwD;QAC/D,KAAK,EAAE,oDAAoD;KAC5D;IACD,aAAa,EAAE;QACb,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,kDAAkD;QAC/D,OAAO,EAAE,6CAA6C;KACvD;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE;QACN,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,8BAA8B,EAAE;QACrE,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,yBAAyB,EAAE;QAChE,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,8BAA8B,EAAE;QAClE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,8BAA8B,EAAE;QACnE,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE;QACtE,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,4BAA4B,EAAE;KACpE;IACD,iBAAiB,EAAE;QACjB,wDAAwD;QACxD,wCAAwC;QACxC,oDAAoD;QACpD,8CAA8C;KAC/C;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACnE,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,mBAAmB;gBACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAChE,IAAI,EACJ,CAAC,CACF;gBACD,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerBrandTemplates(server: McpServer): void;
3
+ //# sourceMappingURL=brand-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-templates.d.ts","sourceRoot":"","sources":["../../src/resources/brand-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2DzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAU9D"}
@@ -0,0 +1,68 @@
1
+ const TEMPLATES = [
2
+ {
3
+ id: 'tech-startup',
4
+ name: 'Tech Startup',
5
+ style: 'tech',
6
+ baseColor: '#6B4CE6',
7
+ harmony: 'complementary',
8
+ headingCategory: 'sans-serif',
9
+ bodyCategory: 'sans-serif',
10
+ },
11
+ {
12
+ id: 'luxury-brand',
13
+ name: 'Luxury Brand',
14
+ style: 'elegant',
15
+ baseColor: '#1A1A2E',
16
+ harmony: 'analogous',
17
+ headingCategory: 'serif',
18
+ bodyCategory: 'serif',
19
+ },
20
+ {
21
+ id: 'health-wellness',
22
+ name: 'Health & Wellness',
23
+ style: 'organic',
24
+ baseColor: '#2D6A4F',
25
+ harmony: 'analogous',
26
+ headingCategory: 'serif',
27
+ bodyCategory: 'sans-serif',
28
+ },
29
+ {
30
+ id: 'creative-agency',
31
+ name: 'Creative Agency',
32
+ style: 'bold',
33
+ baseColor: '#FF6B35',
34
+ harmony: 'triadic',
35
+ headingCategory: 'display',
36
+ bodyCategory: 'sans-serif',
37
+ },
38
+ {
39
+ id: 'fintech',
40
+ name: 'Fintech',
41
+ style: 'corporate',
42
+ baseColor: '#0052CC',
43
+ harmony: 'complementary',
44
+ headingCategory: 'sans-serif',
45
+ bodyCategory: 'sans-serif',
46
+ },
47
+ {
48
+ id: 'education',
49
+ name: 'Education',
50
+ style: 'playful',
51
+ baseColor: '#7C3AED',
52
+ harmony: 'split-complementary',
53
+ headingCategory: 'display',
54
+ bodyCategory: 'sans-serif',
55
+ },
56
+ ];
57
+ export function registerBrandTemplates(server) {
58
+ server.resource('brand-templates', 'brand://templates', async () => ({
59
+ contents: [
60
+ {
61
+ uri: 'brand://templates',
62
+ text: JSON.stringify(TEMPLATES, null, 2),
63
+ mimeType: 'application/json',
64
+ },
65
+ ],
66
+ }));
67
+ }
68
+ //# sourceMappingURL=brand-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-templates.js","sourceRoot":"","sources":["../../src/resources/brand-templates.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG;IAChB;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,eAAe;QACxB,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,WAAW;QACpB,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE,OAAO;KACtB;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,WAAW;QACpB,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,eAAe;QACxB,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,qBAAqB;QAC9B,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,YAAY;KAC3B;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACnE,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,mBAAmB;gBACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCreateBrandGuidelines(server: McpServer): void;
3
+ //# sourceMappingURL=create-brand-guidelines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-brand-guidelines.d.ts","sourceRoot":"","sources":["../../src/tools/create-brand-guidelines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuDzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqCrE"}
@@ -0,0 +1,85 @@
1
+ import { z } from 'zod';
2
+ import { brandDocFormatSchema } from '../lib/branding-core/validators/token-schema.js';
3
+ import { logger } from '../lib/logger.js';
4
+ function generateHtmlGuidelines(brand) {
5
+ const { colors, typography } = brand;
6
+ return `<!DOCTYPE html>
7
+ <html lang="en">
8
+ <head>
9
+ <meta charset="UTF-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
+ <title>${brand.name} - Brand Guidelines</title>
12
+ <style>
13
+ body { font-family: '${typography.bodyFont}', sans-serif; max-width: 960px; margin: 0 auto; padding: 2rem; color: #1a1a1a; }
14
+ h1, h2, h3 { font-family: '${typography.headingFont}', sans-serif; }
15
+ .swatch { display: inline-block; width: 80px; height: 80px; border-radius: 8px; margin: 4px; }
16
+ .color-label { font-size: 12px; text-align: center; margin-top: 4px; }
17
+ .section { margin: 2rem 0; padding: 1.5rem; border: 1px solid #e0e0e0; border-radius: 8px; }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <h1>${brand.name} Brand Guidelines</h1>
22
+ ${brand.tagline ? `<p><em>${brand.tagline}</em></p>` : ''}
23
+
24
+ <div class="section">
25
+ <h2>Color Palette</h2>
26
+ <div>
27
+ <div><div class="swatch" style="background:${colors.primary.hex}"></div><div class="color-label">Primary<br>${colors.primary.hex}</div></div>
28
+ <div><div class="swatch" style="background:${colors.secondary.hex}"></div><div class="color-label">Secondary<br>${colors.secondary.hex}</div></div>
29
+ <div><div class="swatch" style="background:${colors.accent.hex}"></div><div class="color-label">Accent<br>${colors.accent.hex}</div></div>
30
+ </div>
31
+ <h3>Neutrals</h3>
32
+ <div>${colors.neutral.map((n) => `<div style="display:inline-block"><div class="swatch" style="background:${n.hex}"></div><div class="color-label">${n.name}<br>${n.hex}</div></div>`).join('')}</div>
33
+ </div>
34
+
35
+ <div class="section">
36
+ <h2>Typography</h2>
37
+ <p><strong>Heading:</strong> ${typography.headingFont}</p>
38
+ <p><strong>Body:</strong> ${typography.bodyFont}</p>
39
+ <p><strong>Mono:</strong> ${typography.monoFont}</p>
40
+ <h3>Type Scale</h3>
41
+ ${typography.steps.map((s) => `<p style="font-size:${s.size};line-height:${s.lineHeight};font-weight:${s.weight}">${s.name} — ${s.size}</p>`).join('\n ')}
42
+ </div>
43
+
44
+ <div class="section">
45
+ <h2>Logo</h2>
46
+ ${brand.logo?.svg ? brand.logo.svg : '<p>Logo not generated</p>'}
47
+ </div>
48
+
49
+ <footer><p>Generated by @forgespace/branding-mcp</p></footer>
50
+ </body>
51
+ </html>`;
52
+ }
53
+ export function registerCreateBrandGuidelines(server) {
54
+ server.tool('create_brand_guidelines', 'Generate a brand guidelines document (HTML brand book) from a brand identity. Includes color swatches, typography samples, logo, and usage rules.', {
55
+ brand: z.string().describe('Full BrandIdentity JSON'),
56
+ format: brandDocFormatSchema.optional().describe('Output format (html supported)'),
57
+ }, async ({ brand, format }) => {
58
+ try {
59
+ logger.info({ format }, 'Creating brand guidelines');
60
+ const brandData = JSON.parse(brand);
61
+ if (format === 'pdf') {
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: 'PDF generation requires pdfkit. Use HTML format or install optional dependencies.',
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ const html = generateHtmlGuidelines(brandData);
72
+ return {
73
+ content: [{ type: 'text', text: html }],
74
+ };
75
+ }
76
+ catch (error) {
77
+ const message = error instanceof Error ? error.message : String(error);
78
+ return {
79
+ content: [{ type: 'text', text: `Error creating guidelines: ${message}` }],
80
+ isError: true,
81
+ };
82
+ }
83
+ });
84
+ }
85
+ //# sourceMappingURL=create-brand-guidelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-brand-guidelines.js","sourceRoot":"","sources":["../../src/tools/create-brand-guidelines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerExportDesignTokens(server: McpServer): void;
3
+ //# sourceMappingURL=export-design-tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-design-tokens.d.ts","sourceRoot":"","sources":["../../src/tools/export-design-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BlE"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { exportDesignTokens, exportCssVariables, exportTailwindPreset, exportFigmaTokens, exportReactTheme, exportSassVariables, } from '../lib/branding-core/index.js';
3
+ import { exportFormatSchema } from '../lib/branding-core/validators/token-schema.js';
4
+ import { logger } from '../lib/logger.js';
5
+ const EXPORTERS = {
6
+ json: exportDesignTokens,
7
+ css: exportCssVariables,
8
+ tailwind: exportTailwindPreset,
9
+ figma: exportFigmaTokens,
10
+ react: exportReactTheme,
11
+ sass: exportSassVariables,
12
+ };
13
+ export function registerExportDesignTokens(server) {
14
+ server.tool('export_design_tokens', 'Export a brand identity as design tokens in various formats: W3C JSON, CSS custom properties, Tailwind preset, Figma tokens, React theme, or Sass variables.', {
15
+ brand: z.string().describe('Full BrandIdentity JSON (from generate_brand_identity output)'),
16
+ format: exportFormatSchema.describe('Export format'),
17
+ }, async ({ brand, format }) => {
18
+ try {
19
+ logger.info({ format }, 'Exporting design tokens');
20
+ const brandData = JSON.parse(brand);
21
+ const exporter = EXPORTERS[format];
22
+ const result = exporter(brandData);
23
+ const output = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
24
+ return {
25
+ content: [{ type: 'text', text: output }],
26
+ };
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ return {
31
+ content: [{ type: 'text', text: `Error exporting tokens: ${message}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=export-design-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-design-tokens.js","sourceRoot":"","sources":["../../src/tools/export-design-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,SAAS,GAAoE;IACjF,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,kBAAkB;IACvB,QAAQ,EAAE,oBAAoB;IAC9B,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,mBAAmB;CAC1B,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,8JAA8J,EAC9J;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QAC3F,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC;KACrD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC;YACnD,MAAM,SAAS,GAAkB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAErF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,OAAO,EAAE,EAAE,CAAC;gBACvE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGenerateBrandAssets(server: McpServer): void;
3
+ //# sourceMappingURL=generate-brand-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-brand-assets.d.ts","sourceRoot":"","sources":["../../src/tools/generate-brand-assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuCnE"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { generateFavicons, generateOgImage } from '../lib/branding-core/index.js';
3
+ import { logger } from '../lib/logger.js';
4
+ const ogTemplateSchema = z.enum(['default', 'article', 'social']);
5
+ export function registerGenerateBrandAssets(server) {
6
+ server.tool('generate_brand_assets', 'Generate brand assets (favicons, OG images) from an existing brand identity JSON.', {
7
+ brand: z
8
+ .string()
9
+ .min(1)
10
+ .describe('JSON string of BrandIdentity from generate_brand_identity'),
11
+ ogTemplate: ogTemplateSchema
12
+ .optional()
13
+ .describe('OG image template: default, article, or social'),
14
+ ogTitle: z.string().max(200).optional().describe('Custom OG image title'),
15
+ ogSubtitle: z.string().max(200).optional().describe('Custom OG image subtitle'),
16
+ }, async ({ brand: brandJson, ogTemplate, ogTitle, ogSubtitle }) => {
17
+ try {
18
+ const brand = JSON.parse(brandJson);
19
+ logger.info({ brandName: brand.name }, 'Generating brand assets');
20
+ const iconSvg = brand.logo?.variants?.icon ?? brand.logo?.svg ?? '';
21
+ const favicons = iconSvg ? generateFavicons(iconSvg, brand.colors.primary.hex) : null;
22
+ const ogImage = generateOgImage(brand, ogTemplate ?? 'default', ogTitle, ogSubtitle);
23
+ const result = { favicons, ogImage };
24
+ return {
25
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
26
+ };
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ return {
31
+ content: [{ type: 'text', text: `Error generating assets: ${message}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=generate-brand-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-brand-assets.js","sourceRoot":"","sources":["../../src/tools/generate-brand-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,mFAAmF,EACnF;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,2DAA2D,CAAC;QACxE,UAAU,EAAE,gBAAgB;aACzB,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAChF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;YAElE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEtF,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,IAAI,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YAErC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,OAAO,EAAE,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGenerateBrandIdentity(server: McpServer): void;
3
+ //# sourceMappingURL=generate-brand-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-brand-identity.d.ts","sourceRoot":"","sources":["../../src/tools/generate-brand-identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+ErE"}
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ import { generateColorPalette, generateTypographySystem, generateSpacingScale, generateShadowSystem, generateBorderSystem, generateMotionSystem, generateGradientSystem, generateSvgLogo, defaultLogoConfig, } from '../lib/branding-core/index.js';
3
+ import { brandStyleSchema, colorHarmonySchema, colorThemeSchema, fontCategorySchema, hexColorSchema, typeScaleRatioSchema, } from '../lib/branding-core/validators/token-schema.js';
4
+ import { logger } from '../lib/logger.js';
5
+ const STYLE_DEFAULTS = {
6
+ minimal: { heading: 'sans-serif', body: 'sans-serif' },
7
+ bold: { heading: 'display', body: 'sans-serif' },
8
+ elegant: { heading: 'serif', body: 'serif' },
9
+ playful: { heading: 'display', body: 'sans-serif' },
10
+ corporate: { heading: 'sans-serif', body: 'sans-serif' },
11
+ tech: { heading: 'sans-serif', body: 'monospace' },
12
+ organic: { heading: 'serif', body: 'sans-serif' },
13
+ retro: { heading: 'display', body: 'serif' },
14
+ };
15
+ export function registerGenerateBrandIdentity(server) {
16
+ server.tool('generate_brand_identity', 'Generate a complete brand identity including colors, typography, spacing, and logo. Provide a brand name and style preferences to get a cohesive identity system.', {
17
+ brandName: z.string().min(1).max(100).describe('Brand name'),
18
+ industry: z.string().min(1).max(100).describe('Industry or sector (e.g. "tech", "health")'),
19
+ style: brandStyleSchema.describe('Visual style direction'),
20
+ tagline: z.string().max(200).optional().describe('Brand tagline'),
21
+ baseColor: hexColorSchema.optional().describe('Base color preference'),
22
+ harmony: colorHarmonySchema.optional().describe('Color harmony type'),
23
+ theme: colorThemeSchema.optional().describe('Light/dark/both'),
24
+ headingCategory: fontCategorySchema.optional().describe('Heading font category'),
25
+ bodyCategory: fontCategorySchema.optional().describe('Body font category'),
26
+ scaleRatio: typeScaleRatioSchema.optional().describe('Typography scale ratio'),
27
+ }, async ({ brandName, industry, style, tagline, baseColor, harmony, theme, headingCategory, bodyCategory, scaleRatio, }) => {
28
+ try {
29
+ logger.info({ brandName, industry, style }, 'Generating brand identity');
30
+ const defaults = STYLE_DEFAULTS[style];
31
+ const colors = generateColorPalette(baseColor, harmony ?? 'complementary', theme);
32
+ const typography = generateTypographySystem(headingCategory ?? defaults.heading, bodyCategory ?? defaults.body, scaleRatio ?? 'major-third');
33
+ const spacing = generateSpacingScale();
34
+ const shadows = generateShadowSystem(colors.primary.hex, theme);
35
+ const borders = generateBorderSystem(style);
36
+ const motion = generateMotionSystem(style);
37
+ const gradients = generateGradientSystem(colors, style);
38
+ const logoConfig = {
39
+ ...defaultLogoConfig(brandName, colors.primary.hex),
40
+ font: typography.headingFont,
41
+ style,
42
+ };
43
+ const logo = generateSvgLogo(logoConfig);
44
+ const identity = {
45
+ id: `brand_${Date.now().toString(36)}`,
46
+ name: brandName,
47
+ tagline,
48
+ industry,
49
+ style,
50
+ colors,
51
+ typography,
52
+ spacing,
53
+ shadows,
54
+ borders,
55
+ motion,
56
+ gradients,
57
+ logo,
58
+ createdAt: new Date().toISOString(),
59
+ };
60
+ return {
61
+ content: [{ type: 'text', text: JSON.stringify(identity, null, 2) }],
62
+ };
63
+ }
64
+ catch (error) {
65
+ const message = error instanceof Error ? error.message : String(error);
66
+ return {
67
+ content: [{ type: 'text', text: `Error generating brand: ${message}` }],
68
+ isError: true,
69
+ };
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=generate-brand-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-brand-identity.js","sourceRoot":"","sources":["../../src/tools/generate-brand-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGenerateColorPalette(server: McpServer): void;
3
+ //# sourceMappingURL=generate-color-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-color-palette.d.ts","sourceRoot":"","sources":["../../src/tools/generate-color-palette.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiCpE"}
@@ -0,0 +1,33 @@
1
+ import { generateColorPalette } from '../lib/branding-core/index.js';
2
+ import { colorHarmonySchema, colorThemeSchema, hexColorSchema, } from '../lib/branding-core/validators/token-schema.js';
3
+ import { logger } from '../lib/logger.js';
4
+ export function registerGenerateColorPalette(server) {
5
+ server.tool('generate_color_palette', 'Generate a harmonious color palette with WCAG contrast validation. Supports complementary, analogous, triadic, split-complementary, tetradic, and monochromatic harmonies.', {
6
+ baseColor: hexColorSchema
7
+ .optional()
8
+ .describe('Base hex color to build palette from (e.g. #6B4CE6)'),
9
+ harmony: colorHarmonySchema.optional().describe('Color harmony type'),
10
+ theme: colorThemeSchema.optional().describe('Light, dark, or both neutral scales'),
11
+ }, async ({ baseColor, harmony, theme }) => {
12
+ try {
13
+ logger.info({ baseColor, harmony, theme }, 'Generating color palette');
14
+ const palette = generateColorPalette(baseColor, harmony, theme);
15
+ return {
16
+ content: [
17
+ {
18
+ type: 'text',
19
+ text: JSON.stringify(palette, null, 2),
20
+ },
21
+ ],
22
+ };
23
+ }
24
+ catch (error) {
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ return {
27
+ content: [{ type: 'text', text: `Error generating palette: ${message}` }],
28
+ isError: true,
29
+ };
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=generate-color-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-color-palette.js","sourceRoot":"","sources":["../../src/tools/generate-color-palette.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,4KAA4K,EAC5K;QACE,SAAS,EAAE,cAAc;aACtB,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,OAAO,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACrE,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACnF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAEhE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;qBACvC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,OAAO,EAAE,EAAE,CAAC;gBACzE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGenerateTypographySystem(server: McpServer): void;
3
+ //# sourceMappingURL=generate-typography-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-typography-system.d.ts","sourceRoot":"","sources":["../../src/tools/generate-typography-system.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgCxE"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { generateTypographySystem } from '../lib/branding-core/index.js';
3
+ import { fontCategorySchema, typeScaleRatioSchema, } from '../lib/branding-core/validators/token-schema.js';
4
+ import { logger } from '../lib/logger.js';
5
+ export function registerGenerateTypographySystem(server) {
6
+ server.tool('generate_typography_system', 'Generate a typography system with font pairing, modular type scale, and line heights. Uses curated font pairings for visual harmony.', {
7
+ headingCategory: fontCategorySchema.optional().describe('Font category for headings'),
8
+ bodyCategory: fontCategorySchema.optional().describe('Font category for body text'),
9
+ scaleRatio: typeScaleRatioSchema.optional().describe('Modular scale ratio'),
10
+ baseSize: z.number().min(12).max(24).optional().describe('Base font size in pixels'),
11
+ }, async ({ headingCategory, bodyCategory, scaleRatio, baseSize }) => {
12
+ try {
13
+ logger.info({ headingCategory, bodyCategory, scaleRatio }, 'Generating typography system');
14
+ const system = generateTypographySystem(headingCategory, bodyCategory, scaleRatio, baseSize);
15
+ return {
16
+ content: [{ type: 'text', text: JSON.stringify(system, null, 2) }],
17
+ };
18
+ }
19
+ catch (error) {
20
+ const message = error instanceof Error ? error.message : String(error);
21
+ return {
22
+ content: [{ type: 'text', text: `Error generating typography: ${message}` }],
23
+ isError: true,
24
+ };
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=generate-typography-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-typography-system.js","sourceRoot":"","sources":["../../src/tools/generate-typography-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,UAAU,gCAAgC,CAAC,MAAiB;IAChE,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,sIAAsI,EACtI;QACE,eAAe,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrF,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACnF,UAAU,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACrF,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,wBAAwB,CACrC,eAAe,EACf,YAAY,EACZ,UAAU,EACV,QAAQ,CACT,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;gBAC5E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerRefineBrandElement(server: McpServer): void;
3
+ //# sourceMappingURL=refine-brand-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine-brand-element.d.ts","sourceRoot":"","sources":["../../src/tools/refine-brand-element.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwDlE"}
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ import { interpretFeedback, applyIntent } from '../lib/branding-core/index.js';
3
+ import { loadConfig } from '../lib/config.js';
4
+ import { logger } from '../lib/logger.js';
5
+ export function registerRefineBrandElement(server) {
6
+ server.tool('refine_brand_element', 'Refine a specific element of an existing brand identity using natural language feedback. Uses AI interpretation when available, keyword matching as fallback.', {
7
+ brand: z.string().describe('Full BrandIdentity JSON'),
8
+ element: z.enum(['colors', 'typography', 'spacing']).describe('Element to refine'),
9
+ feedback: z
10
+ .string()
11
+ .describe('Natural language feedback (e.g. "make it feel more premium and understated", "use serif headings with dramatic scale")'),
12
+ strategy: z
13
+ .enum(['keyword', 'ai', 'auto'])
14
+ .optional()
15
+ .describe('Interpretation strategy: keyword (fast), ai (Claude API), auto (ai if key available)'),
16
+ }, async ({ brand, element, feedback, strategy }) => {
17
+ try {
18
+ logger.info({ element, feedback, strategy }, 'Refining brand element');
19
+ const brandData = JSON.parse(brand);
20
+ const config = loadConfig();
21
+ const intent = await interpretFeedback(feedback, element, brandData, strategy ?? 'auto', { anthropicApiKey: config.anthropicApiKey });
22
+ const refined = applyIntent(brandData, intent);
23
+ return {
24
+ content: [
25
+ {
26
+ type: 'text',
27
+ text: JSON.stringify({ ...refined, _interpretation: { strategy: strategy ?? 'auto', ...intent } }, null, 2),
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ return {
35
+ content: [{ type: 'text', text: `Error refining element: ${message}` }],
36
+ isError: true,
37
+ };
38
+ }
39
+ });
40
+ }
41
+ //# sourceMappingURL=refine-brand-element.js.map