@forgespace/branding-mcp 0.6.0 → 0.7.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.
@@ -0,0 +1 @@
1
+ * @LucasSantana-Dev
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Forge Space Discussions
4
+ url: https://github.com/orgs/Forge-Space/discussions
5
+ about: Ask questions and share ideas
6
+ - name: Security Policy
7
+ url: https://github.com/Forge-Space/.github/security/policy
8
+ about: Report security vulnerabilities
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest a new feature or improvement
4
+ title: '[FEATURE] '
5
+ labels: ['enhancement', 'needs-triage']
6
+ ---
7
+
8
+ ## Problem
9
+
10
+ <!-- What problem does this solve? -->
11
+
12
+ ## Proposed Solution
13
+
14
+ <!-- How should it work? -->
15
+
16
+ ## Alternatives Considered
17
+
18
+ <!-- Other approaches you thought of -->
19
+
20
+ ## Additional Context
21
+
22
+ <!-- Screenshots, examples, references -->
@@ -0,0 +1,17 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'npm'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
7
+ day: 'monday'
8
+ groups:
9
+ forge-ecosystem:
10
+ patterns: ['@forgespace/*']
11
+ minor-and-patch:
12
+ update-types: ['minor', 'patch']
13
+ open-pull-requests-limit: 10
14
+ - package-ecosystem: 'github-actions'
15
+ directory: '/'
16
+ schedule:
17
+ interval: 'weekly'
@@ -15,12 +15,7 @@ jobs:
15
15
  name: Lint & Format
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/checkout@v4
19
- - uses: actions/setup-node@v4
20
- with:
21
- node-version: 22
22
- cache: npm
23
- - run: npm ci
18
+ - uses: Forge-Space/.github/.github/actions/setup-node@main
24
19
  - run: npm run lint:check
25
20
  - run: npm run format:check
26
21
 
@@ -28,12 +23,7 @@ jobs:
28
23
  name: Type Check
29
24
  runs-on: ubuntu-latest
30
25
  steps:
31
- - uses: actions/checkout@v4
32
- - uses: actions/setup-node@v4
33
- with:
34
- node-version: 22
35
- cache: npm
36
- - run: npm ci
26
+ - uses: Forge-Space/.github/.github/actions/setup-node@main
37
27
  - run: npm run typecheck
38
28
 
39
29
  test:
@@ -43,12 +33,9 @@ jobs:
43
33
  matrix:
44
34
  node-version: [22, 24]
45
35
  steps:
46
- - uses: actions/checkout@v4
47
- - uses: actions/setup-node@v4
36
+ - uses: Forge-Space/.github/.github/actions/setup-node@main
48
37
  with:
49
38
  node-version: ${{ matrix.node-version }}
50
- cache: npm
51
- - run: npm ci
52
39
  - run: npm run test:coverage
53
40
  - name: Upload coverage
54
41
  if: matrix.node-version == 22
@@ -62,12 +49,7 @@ jobs:
62
49
  runs-on: ubuntu-latest
63
50
  needs: [lint, typecheck, test]
64
51
  steps:
65
- - uses: actions/checkout@v4
66
- - uses: actions/setup-node@v4
67
- with:
68
- node-version: 22
69
- cache: npm
70
- - run: npm ci
52
+ - uses: Forge-Space/.github/.github/actions/setup-node@main
71
53
  - run: npm run build
72
54
  - name: Verify dist output
73
55
  run: test -f dist/index.js
@@ -0,0 +1,47 @@
1
+ name: CodeQL Security Analysis
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: '0 2 * * 1'
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze
14
+ runs-on: ubuntu-latest
15
+ timeout-minutes: 360
16
+ permissions:
17
+ security-events: write
18
+ packages: read
19
+ actions: read
20
+ contents: read
21
+
22
+ steps:
23
+ - name: Checkout repository
24
+ uses: actions/checkout@v6
25
+
26
+ - name: Setup Node.js
27
+ uses: actions/setup-node@v6
28
+ with:
29
+ node-version: 22
30
+ cache: npm
31
+
32
+ - name: Install dependencies
33
+ run: npm ci
34
+
35
+ - name: Initialize CodeQL
36
+ uses: github/codeql-action/init@v4
37
+ with:
38
+ languages: javascript-typescript
39
+ queries: +security-and-quality
40
+
41
+ - name: Build project
42
+ run: npm run build
43
+
44
+ - name: Perform CodeQL Analysis
45
+ uses: github/codeql-action/analyze@v4
46
+ with:
47
+ category: '/language:javascript-typescript'
@@ -14,8 +14,8 @@ jobs:
14
14
  name: Validate
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v4
18
- - uses: actions/setup-node@v4
17
+ - uses: actions/checkout@v6
18
+ - uses: actions/setup-node@v6
19
19
  with:
20
20
  node-version: 22
21
21
  cache: npm
@@ -30,7 +30,7 @@ jobs:
30
30
  permissions:
31
31
  contents: write
32
32
  steps:
33
- - uses: actions/checkout@v4
33
+ - uses: actions/checkout@v6
34
34
  - name: Create GitHub Release
35
35
  uses: softprops/action-gh-release@v2
36
36
  with:
@@ -43,8 +43,8 @@ jobs:
43
43
  permissions:
44
44
  contents: read
45
45
  steps:
46
- - uses: actions/checkout@v4
47
- - uses: actions/setup-node@v4
46
+ - uses: actions/checkout@v6
47
+ - uses: actions/setup-node@v6
48
48
  with:
49
49
  node-version: 22
50
50
  cache: npm
@@ -0,0 +1,13 @@
1
+ name: Secret Scanning
2
+
3
+ on:
4
+ push:
5
+ branches: ['**']
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ secrets:
11
+ uses: Forge-Space/.github/.github/workflows/reusable-secret-scan.yml@main
12
+ permissions:
13
+ contents: read
@@ -13,8 +13,8 @@ jobs:
13
13
  name: Dependency Audit
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v4
17
- - uses: actions/setup-node@v4
16
+ - uses: actions/checkout@v6
17
+ - uses: actions/setup-node@v6
18
18
  with:
19
19
  node-version: 22
20
20
  cache: npm
@@ -29,9 +29,9 @@ jobs:
29
29
  name: Secret Scanning
30
30
  runs-on: ubuntu-latest
31
31
  steps:
32
- - uses: actions/checkout@v4
32
+ - uses: actions/checkout@v6
33
33
  with:
34
34
  fetch-depth: 0
35
- - uses: trufflesecurity/trufflehog@v3.93.4
35
+ - uses: trufflesecurity/trufflehog@v3.93.7
36
36
  with:
37
37
  extra_args: --only-verified
@@ -0,0 +1,12 @@
1
+ name: Semgrep CE
2
+
3
+ on:
4
+ pull_request: {}
5
+ push:
6
+ branches: [main]
7
+ paths:
8
+ - .github/workflows/semgrep.yml
9
+
10
+ jobs:
11
+ semgrep:
12
+ uses: Forge-Space/.github/.github/workflows/reusable-semgrep.yml@main
@@ -0,0 +1,17 @@
1
+ name: Trivy Security Scan
2
+
3
+ on:
4
+ pull_request: {}
5
+ push:
6
+ branches: [main]
7
+
8
+ permissions:
9
+ contents: read
10
+ security-events: write
11
+
12
+ jobs:
13
+ trivy:
14
+ uses: Forge-Space/.github/.github/workflows/reusable-trivy.yml@main
15
+ permissions:
16
+ contents: read
17
+ security-events: write
@@ -0,0 +1 @@
1
+ npx --no -- commitlint --edit "$1"
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 22
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [0.7.0] - 2026-03-07
8
+
9
+ ### Added
10
+
11
+ - **Import cycle detection** — `madge --circular` via `npm run check:cycles`
12
+ - **Dead code detection** — knip config with library export exclusions
13
+ - **Security scanning** — Semgrep CE and Trivy integration in CI
14
+ - **Issue templates** — Bug report and feature request templates
15
+ - **Service catalog** — catalog-info.yaml for IDP service discovery
16
+ - **Ecosystem health** — Dependabot config, .nvmrc, CODEOWNERS
17
+
18
+ ### Changed
19
+
20
+ - **CI workflows** — Migrated to org-wide reusable workflows for security scans and Node.js setup
21
+ - **Dependency updates** — Bumped lint-staged (15.5.2→16.3.2), actions/setup-node (4→6), actions/checkout (4→6), trufflesecurity/trufflehog (3.93.3→3.93.7), and minor/patch group updates
22
+
23
+ ### Removed
24
+
25
+ - Unused dependencies: `culori`, `pdfkit`, `satori`, `sharp`, `@types/pdfkit`
26
+
27
+ ## [0.6.2] - 2026-03-07
28
+
29
+ ### Fixed
30
+
31
+ - **WCAG contrast compliance** — Secondary (#3B82F6→#2563EB) and accent (#F59E0B→#B45309) colors now pass AA 4.5:1 on white backgrounds. Brand consistency score 75→100
32
+
33
+ ## [0.6.1] - 2026-03-06
34
+
35
+ ### Changed
36
+
37
+ - **Modern Horn brand templates** — Default Forge Space logo SVGs updated to Modern Horn icon geometry and Sora wordmark (#A78BFA/#8B5CF6/#6D28D9)
38
+
5
39
  ## [0.6.0] - 2026-03-01
6
40
 
7
41
  ### Added
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
- # @forgespace/branding-mcp
2
-
3
- > **AI-powered brand identity generation via MCP — part of the [Forge Space](https://github.com/Forge-Space) open developer workspace.**
1
+ <div align="center">
2
+ <a href="https://forgespace.co">
3
+ <img src="https://brand.forgespace.co/logos/wordmark.svg" alt="Forge Space" height="48">
4
+ </a>
5
+ <h1>@forgespace/branding-mcp</h1>
6
+ <p>AI-powered brand identity generation via MCP — part of the <a href="https://github.com/Forge-Space">Forge Space</a> open developer workspace.</p>
7
+ </div>
4
8
 
5
9
  [![CI](https://github.com/Forge-Space/branding-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Forge-Space/branding-mcp/actions/workflows/ci.yml)
6
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -0,0 +1,16 @@
1
+ apiVersion: backstage.io/v1alpha1
2
+ kind: Service
3
+ metadata:
4
+ name: branding-mcp
5
+ description: MCP server for brand-aware design generation and WCAG validation
6
+ tags:
7
+ - typescript
8
+ - mcp
9
+ - design
10
+ - npm
11
+ spec:
12
+ owner: forge-space
13
+ system: siza
14
+ lifecycle: production
15
+ dependsOn:
16
+ - brand-guide
@@ -0,0 +1,24 @@
1
+ module.exports = {
2
+ extends: ['@commitlint/config-conventional'],
3
+ rules: {
4
+ 'type-enum': [
5
+ 2,
6
+ 'always',
7
+ [
8
+ 'feat',
9
+ 'fix',
10
+ 'docs',
11
+ 'style',
12
+ 'refactor',
13
+ 'perf',
14
+ 'test',
15
+ 'chore',
16
+ 'ci',
17
+ 'build',
18
+ 'revert',
19
+ ],
20
+ ],
21
+ 'header-max-length': [2, 'always', 100],
22
+ 'subject-case': [0],
23
+ },
24
+ };
@@ -1 +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"}
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;AA4WzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoB9D"}
@@ -54,6 +54,305 @@ const TEMPLATES = [
54
54
  bodyCategory: 'sans-serif',
55
55
  },
56
56
  ];
57
+ const FORGE_SPACE_BRAND = {
58
+ id: 'brand_forgespace_001',
59
+ name: 'Forge Space',
60
+ tagline: 'The developer tools ecosystem.',
61
+ industry: 'technology',
62
+ style: 'tech',
63
+ colors: {
64
+ primary: {
65
+ name: 'Forge Purple',
66
+ hex: '#7c3aed',
67
+ hsl: { h: 262, s: 83, l: 58 },
68
+ usage: 'Primary brand color',
69
+ },
70
+ secondary: {
71
+ name: 'Forge Blue',
72
+ hex: '#2563EB',
73
+ hsl: { h: 217, s: 83, l: 53 },
74
+ usage: 'Secondary brand color',
75
+ },
76
+ accent: {
77
+ name: 'Forge Amber',
78
+ hex: '#B45309',
79
+ hsl: { h: 33, s: 92, l: 37 },
80
+ usage: 'Accent and highlight color',
81
+ },
82
+ neutral: [
83
+ {
84
+ name: 'neutral-100',
85
+ hex: '#f2f2f3',
86
+ hsl: { h: 262, s: 5, l: 95 },
87
+ usage: 'Neutral shade 1',
88
+ },
89
+ {
90
+ name: 'neutral-200',
91
+ hex: '#e5e4e7',
92
+ hsl: { h: 262, s: 5, l: 90 },
93
+ usage: 'Neutral shade 2',
94
+ },
95
+ {
96
+ name: 'neutral-300',
97
+ hex: '#cbc9cf',
98
+ hsl: { h: 262, s: 5, l: 80 },
99
+ usage: 'Neutral shade 3',
100
+ },
101
+ {
102
+ name: 'neutral-400',
103
+ hex: '#98949e',
104
+ hsl: { h: 262, s: 5, l: 60 },
105
+ usage: 'Neutral shade 4',
106
+ },
107
+ {
108
+ name: 'neutral-500',
109
+ hex: '#65616b',
110
+ hsl: { h: 262, s: 5, l: 40 },
111
+ usage: 'Neutral shade 5',
112
+ },
113
+ {
114
+ name: 'neutral-600',
115
+ hex: '#323036',
116
+ hsl: { h: 262, s: 5, l: 20 },
117
+ usage: 'Neutral shade 6',
118
+ },
119
+ {
120
+ name: 'neutral-700',
121
+ hex: '#19181b',
122
+ hsl: { h: 262, s: 5, l: 10 },
123
+ usage: 'Neutral shade 7',
124
+ },
125
+ {
126
+ name: 'neutral-800',
127
+ hex: '#0d0c0d',
128
+ hsl: { h: 262, s: 5, l: 5 },
129
+ usage: 'Neutral shade 8',
130
+ },
131
+ ],
132
+ semantic: {
133
+ success: {
134
+ name: 'success',
135
+ hex: '#22c35d',
136
+ hsl: { h: 142, s: 70, l: 45 },
137
+ usage: 'Success states',
138
+ },
139
+ warning: {
140
+ name: 'warning',
141
+ hex: '#f59f0a',
142
+ hsl: { h: 38, s: 92, l: 50 },
143
+ usage: 'Warning states',
144
+ },
145
+ error: { name: 'error', hex: '#ef4343', hsl: { h: 0, s: 84, l: 60 }, usage: 'Error states' },
146
+ info: {
147
+ name: 'info',
148
+ hex: '#368fe7',
149
+ hsl: { h: 210, s: 79, l: 56 },
150
+ usage: 'Informational states',
151
+ },
152
+ },
153
+ contrast: {
154
+ 'primary-on-white': { ratio: 5.67, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
155
+ 'primary-on-dark': { ratio: 3.07, aa: false, aaLarge: true, aaa: false, aaaLarge: false },
156
+ 'secondary-on-white': { ratio: 5.17, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
157
+ 'accent-on-white': { ratio: 5.02, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
158
+ },
159
+ },
160
+ typography: {
161
+ headingFont: 'Space Grotesk',
162
+ bodyFont: 'IBM Plex Sans',
163
+ monoFont: 'IBM Plex Mono',
164
+ baseSize: 16,
165
+ scaleRatio: 1.25,
166
+ steps: [
167
+ { name: 'xs', size: '10.24px', lineHeight: '1.6', letterSpacing: '0.02em', weight: 400 },
168
+ { name: 'sm', size: '12.8px', lineHeight: '1.6', letterSpacing: '0.02em', weight: 400 },
169
+ { name: 'base', size: '16px', lineHeight: '1.6', letterSpacing: '0em', weight: 400 },
170
+ { name: 'lg', size: '20px', lineHeight: '1.5', letterSpacing: '0em', weight: 400 },
171
+ { name: 'xl', size: '25px', lineHeight: '1.3', letterSpacing: '-0.01em', weight: 400 },
172
+ { name: '2xl', size: '31.25px', lineHeight: '1.3', letterSpacing: '-0.01em', weight: 600 },
173
+ { name: '3xl', size: '39.06px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 600 },
174
+ { name: '4xl', size: '48.83px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 700 },
175
+ { name: '5xl', size: '61.04px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 700 },
176
+ ],
177
+ },
178
+ spacing: {
179
+ unit: 4,
180
+ values: {
181
+ '0': '0px',
182
+ '1': '4px',
183
+ '2': '8px',
184
+ '3': '12px',
185
+ '4': '16px',
186
+ '5': '20px',
187
+ '6': '24px',
188
+ '8': '32px',
189
+ '10': '40px',
190
+ '12': '48px',
191
+ '16': '64px',
192
+ '20': '80px',
193
+ '24': '96px',
194
+ '0.5': '2px',
195
+ '1.5': '6px',
196
+ '2.5': '10px',
197
+ },
198
+ },
199
+ shadows: {
200
+ levels: {
201
+ none: {
202
+ offsetX: 0,
203
+ offsetY: 0,
204
+ blur: 0,
205
+ spread: 0,
206
+ color: 'rgba(47, 36, 66, 0)',
207
+ opacity: 0,
208
+ cssValue: 'none',
209
+ },
210
+ sm: {
211
+ offsetX: 0,
212
+ offsetY: 1,
213
+ blur: 2,
214
+ spread: 0,
215
+ color: 'rgba(47, 36, 66, 0.05)',
216
+ opacity: 0.05,
217
+ cssValue: '1px 1px 2px 0px rgba(47, 36, 66, 0.05)',
218
+ },
219
+ md: {
220
+ offsetX: 0,
221
+ offsetY: 2,
222
+ blur: 4,
223
+ spread: -1,
224
+ color: 'rgba(47, 36, 66, 0.08)',
225
+ opacity: 0.08,
226
+ cssValue: '2px 2px 4px -1px rgba(47, 36, 66, 0.08)',
227
+ },
228
+ lg: {
229
+ offsetX: 0,
230
+ offsetY: 4,
231
+ blur: 8,
232
+ spread: -2,
233
+ color: 'rgba(47, 36, 66, 0.1)',
234
+ opacity: 0.1,
235
+ cssValue: '4px 4px 8px -2px rgba(47, 36, 66, 0.1)',
236
+ },
237
+ xl: {
238
+ offsetX: 0,
239
+ offsetY: 8,
240
+ blur: 16,
241
+ spread: -4,
242
+ color: 'rgba(47, 36, 66, 0.12)',
243
+ opacity: 0.12,
244
+ cssValue: '8px 8px 16px -4px rgba(47, 36, 66, 0.12)',
245
+ },
246
+ '2xl': {
247
+ offsetX: 0,
248
+ offsetY: 16,
249
+ blur: 32,
250
+ spread: -8,
251
+ color: 'rgba(47, 36, 66, 0.15)',
252
+ opacity: 0.15,
253
+ cssValue: '16px 16px 32px -8px rgba(47, 36, 66, 0.15)',
254
+ },
255
+ },
256
+ },
257
+ borders: {
258
+ radii: {
259
+ none: '0px',
260
+ sm: '2px',
261
+ md: '4px',
262
+ lg: '8px',
263
+ xl: '12px',
264
+ full: '9999px',
265
+ circle: '9999px',
266
+ },
267
+ widths: {
268
+ thin: '1px',
269
+ medium: '2px',
270
+ thick: '3px',
271
+ },
272
+ },
273
+ motion: {
274
+ durations: {
275
+ instant: '0ms',
276
+ fast: '80ms',
277
+ normal: '150ms',
278
+ slow: '250ms',
279
+ slower: '350ms',
280
+ },
281
+ easings: {
282
+ 'ease-in': 'cubic-bezier(0.55, 0, 1, 1)',
283
+ 'ease-out': 'cubic-bezier(0, 0, 0.1, 1)',
284
+ 'ease-in-out': 'cubic-bezier(0.55, 0, 0.1, 1)',
285
+ spring: 'cubic-bezier(0.2, 1.6, 0.4, 1)',
286
+ bounce: 'cubic-bezier(0.2, 1.4, 0.4, 1)',
287
+ },
288
+ transitions: {
289
+ fade: 'opacity 150ms cubic-bezier(0, 0, 0.1, 1)',
290
+ slide: 'transform 150ms cubic-bezier(0, 0, 0.1, 1)',
291
+ scale: 'transform 80ms cubic-bezier(0, 0, 0.1, 1)',
292
+ color: 'color 250ms cubic-bezier(0, 0, 0.1, 1), background-color 250ms cubic-bezier(0, 0, 0.1, 1)',
293
+ all: 'all 150ms cubic-bezier(0, 0, 0.1, 1)',
294
+ },
295
+ },
296
+ gradients: {
297
+ presets: {
298
+ hero: {
299
+ type: 'linear',
300
+ angle: 315,
301
+ stops: [
302
+ { color: '#7c3aed', position: 0 },
303
+ { color: '#3B82F6', position: 100 },
304
+ ],
305
+ cssValue: 'linear-gradient(315deg, #7c3aed 0%, #3B82F6 100%)',
306
+ },
307
+ button: {
308
+ type: 'linear',
309
+ angle: 315,
310
+ stops: [
311
+ { color: '#F59E0B', position: 0 },
312
+ { color: '#7c3aed', position: 100 },
313
+ ],
314
+ cssValue: 'linear-gradient(315deg, #F59E0B 0%, #7c3aed 100%)',
315
+ },
316
+ card: {
317
+ type: 'linear',
318
+ angle: 315,
319
+ stops: [
320
+ { color: '#f2f2f3', position: 0 },
321
+ { color: '#cacace', position: 100 },
322
+ ],
323
+ cssValue: 'linear-gradient(315deg, #f2f2f3 0%, #cacace 100%)',
324
+ },
325
+ text: {
326
+ type: 'linear',
327
+ angle: 315,
328
+ stops: [
329
+ { color: '#7c3aed', position: 0 },
330
+ { color: '#F59E0B', position: 100 },
331
+ ],
332
+ cssValue: 'linear-gradient(315deg, #7c3aed 0%, #F59E0B 100%)',
333
+ },
334
+ background: {
335
+ type: 'linear',
336
+ angle: 315,
337
+ stops: [
338
+ { color: '#f2f2f3', position: 0 },
339
+ { color: '#0d0c0d', position: 100 },
340
+ ],
341
+ cssValue: 'linear-gradient(315deg, #f2f2f3 0%, #0d0c0d 100%)',
342
+ },
343
+ },
344
+ },
345
+ logo: {
346
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="64" viewBox="0 0 200 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n <text x="78" y="30" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">FORGE</text>\n <text x="78" y="52" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">SPACE</text>\n</svg>',
347
+ variants: {
348
+ wordmark: '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="64" viewBox="0 0 200 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n <text x="78" y="30" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">FORGE</text>\n <text x="78" y="52" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">SPACE</text>\n</svg>',
349
+ monogram: '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n</svg>',
350
+ abstract: '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#8B5CF6"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#8B5CF6"/>\n</svg>',
351
+ icon: '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n</svg>',
352
+ },
353
+ },
354
+ createdAt: '2026-03-01T05:55:29.414Z',
355
+ };
57
356
  export function registerBrandTemplates(server) {
58
357
  server.resource('brand-templates', 'brand://templates', async () => ({
59
358
  contents: [
@@ -64,5 +363,14 @@ export function registerBrandTemplates(server) {
64
363
  },
65
364
  ],
66
365
  }));
366
+ server.resource('forge-space-brand', 'brand://templates/forge-space', async () => ({
367
+ contents: [
368
+ {
369
+ uri: 'brand://templates/forge-space',
370
+ text: JSON.stringify(FORGE_SPACE_BRAND, null, 2),
371
+ mimeType: 'application/json',
372
+ },
373
+ ],
374
+ }));
67
375
  }
68
376
  //# sourceMappingURL=brand-templates.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"brand-templates.js","sourceRoot":"","sources":["../../src/resources/brand-templates.ts"],"names":[],"mappings":"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"}
package/knip.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://unpkg.com/knip@5/schema.json",
3
+ "ignoreDependencies": ["lint-staged"],
4
+ "ignore": [
5
+ "src/lib/branding-core/documents/html-generator.ts",
6
+ "src/lib/branding-core/documents/pdf-generator.ts"
7
+ ],
8
+ "ignoreExportsUsedInFile": true,
9
+ "exclude": ["exports", "types"]
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgespace/branding-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "MCP server for AI-powered brand identity generation — color palettes, typography systems, design tokens, and brand guidelines with multi-format export",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,6 +24,8 @@
24
24
  "test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
25
25
  "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
26
26
  "typecheck": "tsc --noEmit",
27
+ "check:cycles": "madge --circular --extensions ts src/",
28
+ "knip": "knip",
27
29
  "pre-commit": "npm run lint && npm run format && npm run test",
28
30
  "prepare": "husky"
29
31
  },
@@ -49,22 +51,21 @@
49
51
  "homepage": "https://github.com/Forge-Space/branding-mcp#readme",
50
52
  "dependencies": {
51
53
  "@modelcontextprotocol/sdk": "^1.26.0",
52
- "culori": "^4.0.1",
53
- "pdfkit": "^0.16.0",
54
54
  "pino": "^10.3.1",
55
- "satori": "^0.12.1",
56
- "sharp": "^0.34.5",
57
55
  "zod": "^3.24.0"
58
56
  },
59
57
  "devDependencies": {
58
+ "@commitlint/cli": "^20.4.3",
59
+ "@commitlint/config-conventional": "^20.4.3",
60
60
  "@types/node": "^22.15.0",
61
- "@types/pdfkit": "^0.13.8",
62
61
  "@typescript-eslint/eslint-plugin": "^8.32.0",
63
62
  "@typescript-eslint/parser": "^8.32.0",
64
63
  "eslint": "^9.0.0",
65
64
  "husky": "^9.0.0",
66
65
  "jest": "^29.7.0",
67
- "lint-staged": "^15.0.0",
66
+ "knip": "^5.86.0",
67
+ "lint-staged": "^16.3.2",
68
+ "madge": "^8.0.0",
68
69
  "prettier": "^3.0.0",
69
70
  "ts-jest": "^29.4.6",
70
71
  "typescript": "^5.1.6"
@@ -1,4 +1,5 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { BrandIdentity } from '../lib/types.js';
2
3
 
3
4
  const TEMPLATES = [
4
5
  {
@@ -57,6 +58,310 @@ const TEMPLATES = [
57
58
  },
58
59
  ];
59
60
 
61
+ const FORGE_SPACE_BRAND: BrandIdentity = {
62
+ id: 'brand_forgespace_001',
63
+ name: 'Forge Space',
64
+ tagline: 'The developer tools ecosystem.',
65
+ industry: 'technology',
66
+ style: 'tech',
67
+ colors: {
68
+ primary: {
69
+ name: 'Forge Purple',
70
+ hex: '#7c3aed',
71
+ hsl: { h: 262, s: 83, l: 58 },
72
+ usage: 'Primary brand color',
73
+ },
74
+ secondary: {
75
+ name: 'Forge Blue',
76
+ hex: '#2563EB',
77
+ hsl: { h: 217, s: 83, l: 53 },
78
+ usage: 'Secondary brand color',
79
+ },
80
+ accent: {
81
+ name: 'Forge Amber',
82
+ hex: '#B45309',
83
+ hsl: { h: 33, s: 92, l: 37 },
84
+ usage: 'Accent and highlight color',
85
+ },
86
+ neutral: [
87
+ {
88
+ name: 'neutral-100',
89
+ hex: '#f2f2f3',
90
+ hsl: { h: 262, s: 5, l: 95 },
91
+ usage: 'Neutral shade 1',
92
+ },
93
+ {
94
+ name: 'neutral-200',
95
+ hex: '#e5e4e7',
96
+ hsl: { h: 262, s: 5, l: 90 },
97
+ usage: 'Neutral shade 2',
98
+ },
99
+ {
100
+ name: 'neutral-300',
101
+ hex: '#cbc9cf',
102
+ hsl: { h: 262, s: 5, l: 80 },
103
+ usage: 'Neutral shade 3',
104
+ },
105
+ {
106
+ name: 'neutral-400',
107
+ hex: '#98949e',
108
+ hsl: { h: 262, s: 5, l: 60 },
109
+ usage: 'Neutral shade 4',
110
+ },
111
+ {
112
+ name: 'neutral-500',
113
+ hex: '#65616b',
114
+ hsl: { h: 262, s: 5, l: 40 },
115
+ usage: 'Neutral shade 5',
116
+ },
117
+ {
118
+ name: 'neutral-600',
119
+ hex: '#323036',
120
+ hsl: { h: 262, s: 5, l: 20 },
121
+ usage: 'Neutral shade 6',
122
+ },
123
+ {
124
+ name: 'neutral-700',
125
+ hex: '#19181b',
126
+ hsl: { h: 262, s: 5, l: 10 },
127
+ usage: 'Neutral shade 7',
128
+ },
129
+ {
130
+ name: 'neutral-800',
131
+ hex: '#0d0c0d',
132
+ hsl: { h: 262, s: 5, l: 5 },
133
+ usage: 'Neutral shade 8',
134
+ },
135
+ ],
136
+ semantic: {
137
+ success: {
138
+ name: 'success',
139
+ hex: '#22c35d',
140
+ hsl: { h: 142, s: 70, l: 45 },
141
+ usage: 'Success states',
142
+ },
143
+ warning: {
144
+ name: 'warning',
145
+ hex: '#f59f0a',
146
+ hsl: { h: 38, s: 92, l: 50 },
147
+ usage: 'Warning states',
148
+ },
149
+ error: { name: 'error', hex: '#ef4343', hsl: { h: 0, s: 84, l: 60 }, usage: 'Error states' },
150
+ info: {
151
+ name: 'info',
152
+ hex: '#368fe7',
153
+ hsl: { h: 210, s: 79, l: 56 },
154
+ usage: 'Informational states',
155
+ },
156
+ },
157
+ contrast: {
158
+ 'primary-on-white': { ratio: 5.67, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
159
+ 'primary-on-dark': { ratio: 3.07, aa: false, aaLarge: true, aaa: false, aaaLarge: false },
160
+ 'secondary-on-white': { ratio: 5.17, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
161
+ 'accent-on-white': { ratio: 5.02, aa: true, aaLarge: true, aaa: false, aaaLarge: true },
162
+ },
163
+ },
164
+ typography: {
165
+ headingFont: 'Space Grotesk',
166
+ bodyFont: 'IBM Plex Sans',
167
+ monoFont: 'IBM Plex Mono',
168
+ baseSize: 16,
169
+ scaleRatio: 1.25,
170
+ steps: [
171
+ { name: 'xs', size: '10.24px', lineHeight: '1.6', letterSpacing: '0.02em', weight: 400 },
172
+ { name: 'sm', size: '12.8px', lineHeight: '1.6', letterSpacing: '0.02em', weight: 400 },
173
+ { name: 'base', size: '16px', lineHeight: '1.6', letterSpacing: '0em', weight: 400 },
174
+ { name: 'lg', size: '20px', lineHeight: '1.5', letterSpacing: '0em', weight: 400 },
175
+ { name: 'xl', size: '25px', lineHeight: '1.3', letterSpacing: '-0.01em', weight: 400 },
176
+ { name: '2xl', size: '31.25px', lineHeight: '1.3', letterSpacing: '-0.01em', weight: 600 },
177
+ { name: '3xl', size: '39.06px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 600 },
178
+ { name: '4xl', size: '48.83px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 700 },
179
+ { name: '5xl', size: '61.04px', lineHeight: '1.2', letterSpacing: '-0.01em', weight: 700 },
180
+ ],
181
+ },
182
+ spacing: {
183
+ unit: 4,
184
+ values: {
185
+ '0': '0px',
186
+ '1': '4px',
187
+ '2': '8px',
188
+ '3': '12px',
189
+ '4': '16px',
190
+ '5': '20px',
191
+ '6': '24px',
192
+ '8': '32px',
193
+ '10': '40px',
194
+ '12': '48px',
195
+ '16': '64px',
196
+ '20': '80px',
197
+ '24': '96px',
198
+ '0.5': '2px',
199
+ '1.5': '6px',
200
+ '2.5': '10px',
201
+ },
202
+ },
203
+ shadows: {
204
+ levels: {
205
+ none: {
206
+ offsetX: 0,
207
+ offsetY: 0,
208
+ blur: 0,
209
+ spread: 0,
210
+ color: 'rgba(47, 36, 66, 0)',
211
+ opacity: 0,
212
+ cssValue: 'none',
213
+ },
214
+ sm: {
215
+ offsetX: 0,
216
+ offsetY: 1,
217
+ blur: 2,
218
+ spread: 0,
219
+ color: 'rgba(47, 36, 66, 0.05)',
220
+ opacity: 0.05,
221
+ cssValue: '1px 1px 2px 0px rgba(47, 36, 66, 0.05)',
222
+ },
223
+ md: {
224
+ offsetX: 0,
225
+ offsetY: 2,
226
+ blur: 4,
227
+ spread: -1,
228
+ color: 'rgba(47, 36, 66, 0.08)',
229
+ opacity: 0.08,
230
+ cssValue: '2px 2px 4px -1px rgba(47, 36, 66, 0.08)',
231
+ },
232
+ lg: {
233
+ offsetX: 0,
234
+ offsetY: 4,
235
+ blur: 8,
236
+ spread: -2,
237
+ color: 'rgba(47, 36, 66, 0.1)',
238
+ opacity: 0.1,
239
+ cssValue: '4px 4px 8px -2px rgba(47, 36, 66, 0.1)',
240
+ },
241
+ xl: {
242
+ offsetX: 0,
243
+ offsetY: 8,
244
+ blur: 16,
245
+ spread: -4,
246
+ color: 'rgba(47, 36, 66, 0.12)',
247
+ opacity: 0.12,
248
+ cssValue: '8px 8px 16px -4px rgba(47, 36, 66, 0.12)',
249
+ },
250
+ '2xl': {
251
+ offsetX: 0,
252
+ offsetY: 16,
253
+ blur: 32,
254
+ spread: -8,
255
+ color: 'rgba(47, 36, 66, 0.15)',
256
+ opacity: 0.15,
257
+ cssValue: '16px 16px 32px -8px rgba(47, 36, 66, 0.15)',
258
+ },
259
+ },
260
+ },
261
+ borders: {
262
+ radii: {
263
+ none: '0px',
264
+ sm: '2px',
265
+ md: '4px',
266
+ lg: '8px',
267
+ xl: '12px',
268
+ full: '9999px',
269
+ circle: '9999px',
270
+ },
271
+ widths: {
272
+ thin: '1px',
273
+ medium: '2px',
274
+ thick: '3px',
275
+ },
276
+ },
277
+ motion: {
278
+ durations: {
279
+ instant: '0ms',
280
+ fast: '80ms',
281
+ normal: '150ms',
282
+ slow: '250ms',
283
+ slower: '350ms',
284
+ },
285
+ easings: {
286
+ 'ease-in': 'cubic-bezier(0.55, 0, 1, 1)',
287
+ 'ease-out': 'cubic-bezier(0, 0, 0.1, 1)',
288
+ 'ease-in-out': 'cubic-bezier(0.55, 0, 0.1, 1)',
289
+ spring: 'cubic-bezier(0.2, 1.6, 0.4, 1)',
290
+ bounce: 'cubic-bezier(0.2, 1.4, 0.4, 1)',
291
+ },
292
+ transitions: {
293
+ fade: 'opacity 150ms cubic-bezier(0, 0, 0.1, 1)',
294
+ slide: 'transform 150ms cubic-bezier(0, 0, 0.1, 1)',
295
+ scale: 'transform 80ms cubic-bezier(0, 0, 0.1, 1)',
296
+ color:
297
+ 'color 250ms cubic-bezier(0, 0, 0.1, 1), background-color 250ms cubic-bezier(0, 0, 0.1, 1)',
298
+ all: 'all 150ms cubic-bezier(0, 0, 0.1, 1)',
299
+ },
300
+ },
301
+ gradients: {
302
+ presets: {
303
+ hero: {
304
+ type: 'linear',
305
+ angle: 315,
306
+ stops: [
307
+ { color: '#7c3aed', position: 0 },
308
+ { color: '#3B82F6', position: 100 },
309
+ ],
310
+ cssValue: 'linear-gradient(315deg, #7c3aed 0%, #3B82F6 100%)',
311
+ },
312
+ button: {
313
+ type: 'linear',
314
+ angle: 315,
315
+ stops: [
316
+ { color: '#F59E0B', position: 0 },
317
+ { color: '#7c3aed', position: 100 },
318
+ ],
319
+ cssValue: 'linear-gradient(315deg, #F59E0B 0%, #7c3aed 100%)',
320
+ },
321
+ card: {
322
+ type: 'linear',
323
+ angle: 315,
324
+ stops: [
325
+ { color: '#f2f2f3', position: 0 },
326
+ { color: '#cacace', position: 100 },
327
+ ],
328
+ cssValue: 'linear-gradient(315deg, #f2f2f3 0%, #cacace 100%)',
329
+ },
330
+ text: {
331
+ type: 'linear',
332
+ angle: 315,
333
+ stops: [
334
+ { color: '#7c3aed', position: 0 },
335
+ { color: '#F59E0B', position: 100 },
336
+ ],
337
+ cssValue: 'linear-gradient(315deg, #7c3aed 0%, #F59E0B 100%)',
338
+ },
339
+ background: {
340
+ type: 'linear',
341
+ angle: 315,
342
+ stops: [
343
+ { color: '#f2f2f3', position: 0 },
344
+ { color: '#0d0c0d', position: 100 },
345
+ ],
346
+ cssValue: 'linear-gradient(315deg, #f2f2f3 0%, #0d0c0d 100%)',
347
+ },
348
+ },
349
+ },
350
+ logo: {
351
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="64" viewBox="0 0 200 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n <text x="78" y="30" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">FORGE</text>\n <text x="78" y="52" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">SPACE</text>\n</svg>',
352
+ variants: {
353
+ wordmark:
354
+ '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="64" viewBox="0 0 200 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n <text x="78" y="30" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">FORGE</text>\n <text x="78" y="52" fill="#8B5CF6" font-size="20" font-family="\'Sora\', sans-serif" font-weight="600" letter-spacing="0.12em">SPACE</text>\n</svg>',
355
+ monogram:
356
+ '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n</svg>',
357
+ abstract:
358
+ '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#8B5CF6"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#8B5CF6"/>\n</svg>',
359
+ icon: '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">\n <path d="M4 20 L18 14 H56 a3 3 0 0 1 3 3 v6 a3 3 0 0 1-3 3 H18 L4 24 V20Z" fill="#A78BFA"/>\n <rect x="20" y="32" width="30" height="10" rx="3" fill="#8B5CF6"/>\n <rect x="14" y="48" width="40" height="14" rx="4" fill="#6D28D9"/>\n</svg>',
360
+ },
361
+ },
362
+ createdAt: '2026-03-01T05:55:29.414Z',
363
+ };
364
+
60
365
  export function registerBrandTemplates(server: McpServer): void {
61
366
  server.resource('brand-templates', 'brand://templates', async () => ({
62
367
  contents: [
@@ -67,4 +372,14 @@ export function registerBrandTemplates(server: McpServer): void {
67
372
  },
68
373
  ],
69
374
  }));
375
+
376
+ server.resource('forge-space-brand', 'brand://templates/forge-space', async () => ({
377
+ contents: [
378
+ {
379
+ uri: 'brand://templates/forge-space',
380
+ text: JSON.stringify(FORGE_SPACE_BRAND, null, 2),
381
+ mimeType: 'application/json',
382
+ },
383
+ ],
384
+ }));
70
385
  }