sdd-es 2.0.0 → 2.6.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 (127) hide show
  1. package/.claude/settings.json +29 -29
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +10 -7
  4. package/.claude-plugin/plugin.json +59 -37
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/LICENSE +21 -0
  8. package/README.md +77 -40
  9. package/agents/architecture-designer.md +211 -0
  10. package/agents/arquitecto.md +16 -1
  11. package/agents/asesor-datos.md +15 -1
  12. package/agents/critico.md +37 -1
  13. package/agents/desarrollador-backend.md +3 -1
  14. package/agents/desarrollador-frontend.md +11 -16
  15. package/agents/disenador-api.md +13 -1
  16. package/agents/documentador.md +3 -1
  17. package/agents/investigador.md +3 -1
  18. package/agents/operaciones.md +3 -1
  19. package/agents/product-designer.md +268 -0
  20. package/agents/revisor.md +25 -1
  21. package/agents/seguridad.md +5 -1
  22. package/agents/tester.md +3 -1
  23. package/claude-hooks/agent-memory.js +288 -0
  24. package/claude-hooks/pre-tool-guard.js +61 -9
  25. package/cli/index.js +1 -2
  26. package/commands/sdd.adr.md +196 -0
  27. package/commands/sdd.analizar.md +23 -2
  28. package/commands/sdd.ayuda.md +13 -0
  29. package/commands/sdd.compliance.md +521 -0
  30. package/commands/sdd.configurar.md +34 -1
  31. package/commands/sdd.constitucion.md +198 -23
  32. package/commands/sdd.construir.md +210 -0
  33. package/commands/sdd.crear-mcp.md +2 -0
  34. package/commands/sdd.defect-report.md +134 -0
  35. package/commands/sdd.descubrir.md +19 -0
  36. package/commands/sdd.dise/303/261ar.md +188 -0
  37. package/commands/sdd.estado.md +120 -3
  38. package/commands/sdd.exportar.md +344 -0
  39. package/commands/sdd.implementar.md +272 -52
  40. package/commands/sdd.interpretar.md +239 -0
  41. package/commands/sdd.md +93 -4
  42. package/commands/sdd.optimizar-memoria.md +47 -0
  43. package/commands/sdd.optimizar.md +164 -0
  44. package/commands/sdd.planificar.md +64 -0
  45. package/commands/sdd.retro.md +74 -0
  46. package/commands/sdd.verificar.md +81 -0
  47. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  48. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  49. package/craft/accessibility-baseline.md +216 -0
  50. package/craft/anti-ai-slop.md +158 -0
  51. package/craft/color.md +160 -0
  52. package/craft/typography.md +121 -0
  53. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  54. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  55. package/design-systems/neutral-modern/DESIGN.md +227 -0
  56. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  57. package/design-systems/warm-editorial/DESIGN.md +221 -0
  58. package/docs/AGENTES.md +4 -1
  59. package/docs/CASO-COMPLETO.md +206 -0
  60. package/docs/EJEMPLOS.md +61 -185
  61. package/docs/FABRICA.md +163 -115
  62. package/docs/INICIO-RAPIDO.md +27 -79
  63. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
  64. package/docs/MODELOS.md +3 -0
  65. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  66. package/docs/README.md +43 -0
  67. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  68. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  69. package/package.json +15 -10
  70. package/plantillas/job-story-mejorar-prompt.md +107 -0
  71. package/presets/enterprise.yaml +6 -0
  72. package/presets/lean.yaml +4 -0
  73. package/presets/startup.yaml +6 -0
  74. package/skills/adr-indexer/SKILL.md +181 -0
  75. package/skills/cache-audit/SKILL.md +163 -0
  76. package/skills/critica-diseno/SKILL.md +193 -0
  77. package/skills/descubrir-idea/SKILL.md +133 -0
  78. package/skills/effort-router/SKILL.md +128 -0
  79. package/skills/elegir-direccion/SKILL.md +184 -0
  80. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  81. package/skills/github-connect/INDEX.md +223 -0
  82. package/skills/github-connect/INTEGRATION.md +361 -0
  83. package/skills/github-connect/QUICK-START.md +168 -0
  84. package/skills/github-connect/README.md +414 -0
  85. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  86. package/skills/github-connect/SKILL.md +343 -0
  87. package/skills/github-connect/STRUCTURE.txt +252 -0
  88. package/skills/github-connect/example-config.yaml +41 -0
  89. package/skills/github-connect/github-connect.sh +419 -0
  90. package/skills/interpretar-idea/SKILL.md +254 -0
  91. package/skills/mejorar-prompt/SKILL.md +237 -0
  92. package/skills/memory-compactor/SKILL.md +68 -0
  93. package/skills/modo-guiado/SKILL.md +12 -2
  94. package/skills/mutation-detector/SKILL.md +134 -0
  95. package/skills/observabilidad-consumo/SKILL.md +164 -0
  96. package/skills/token-budget/SKILL.md +177 -0
  97. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  98. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  99. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  100. package/skills/vercel-deploy/FLOW.txt +334 -0
  101. package/skills/vercel-deploy/INDEX.md +276 -0
  102. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  103. package/skills/vercel-deploy/MANIFEST.md +310 -0
  104. package/skills/vercel-deploy/README.md +65 -0
  105. package/skills/vercel-deploy/SKILL.md +356 -0
  106. package/skills/vercel-deploy/deploy.sh +298 -0
  107. package/skills/vercel-deploy/estado.json.example +205 -0
  108. package/skills/vercel-deploy/skill.yaml +323 -0
  109. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  110. package/skills/wireframe-mvp/SKILL.md +157 -0
  111. package/docs/EJEMPLO-PRACTICA.md +0 -383
  112. package/mcp-figma/README.md +0 -158
  113. package/mcp-figma/package.json +0 -7
  114. package/mcp-figma/src/component-generator.js +0 -162
  115. package/mcp-figma/src/design-system-analyzer.js +0 -247
  116. package/mcp-figma/src/figma-client.js +0 -75
  117. package/mcp-figma/src/index.js +0 -114
  118. package/mcp-figma/src/mcp.js +0 -97
  119. package/mcp-figma/src/style-mapper.js +0 -85
  120. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  121. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  122. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  123. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  124. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  125. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  126. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  127. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -1,383 +0,0 @@
1
- # Ejemplo Práctico — API de Lista de Tareas desde Cero
2
-
3
- Este ejemplo recorre el flujo completo de SDD-ES construyendo una API REST de lista de tareas con Node.js + Express + SQLite. No asume ningún código previo.
4
-
5
- ---
6
-
7
- ## Contexto del proyecto
8
-
9
- Tienes una carpeta vacía. Quieres construir una API que permita crear, listar, completar y eliminar tareas.
10
-
11
- ```bash
12
- mkdir mi-api-tareas
13
- cd mi-api-tareas
14
- git init
15
- bash /ruta/a/sdd-es/instalar.sh
16
- ```
17
-
18
- Abre Claude Code en `mi-api-tareas`.
19
-
20
- ---
21
-
22
- ## Paso 1 — Constitución
23
-
24
- ```
25
- /sdd.constitucion
26
- ```
27
-
28
- Claude detecta que el proyecto está vacío y te pregunta por el stack. Respondes:
29
-
30
- ```
31
- Stack: Node.js con Express
32
- Base de datos: SQLite (sin ORM, queries directas)
33
- Tests: Jest
34
- Calidad: cobertura mínima 80%, funciones ≤40 líneas, sin any en TypeScript
35
- Sin TypeScript por ahora — JavaScript puro
36
- ```
37
-
38
- Claude genera `.sdd/memoria/constitucion.md` con tus principios.
39
-
40
- ---
41
-
42
- ## Paso 2 — Primera especificación
43
-
44
- ```
45
- /sdd.especificar API de lista de tareas — CRUD completo con SQLite
46
- ```
47
-
48
- Claude detecta que es un cambio **mediano** (varios endpoints, BD, tests) y genera la spec:
49
-
50
- ```
51
- ✅ Spec creada: .sdd/especificaciones/2026-06-09-api-lista-tareas/spec.md
52
-
53
- ⚠️ 2 puntos requieren aclaración.
54
-
55
- PRÓXIMO PASO RECOMENDADO:
56
- /sdd.aclarar — resolver los [NECESITA_ACLARACION]
57
- ```
58
-
59
- La spec generada contiene secciones como:
60
-
61
- ```markdown
62
- ## 4. Historias de Usuario
63
-
64
- ### HU-001: Gestión de tareas
65
- Como usuario de la API
66
- Quiero crear, listar, completar y eliminar tareas
67
- Para organizar mi trabajo
68
-
69
- Criterios de aceptación:
70
- - [ ] CA-001-01: POST /tareas crea una tarea con título obligatorio (P1)
71
- - [ ] CA-001-02: GET /tareas devuelve todas las tareas ordenadas por fecha (P1)
72
- - [ ] CA-001-03: PATCH /tareas/:id/completar marca la tarea como completa (P1)
73
- - [ ] CA-001-04: DELETE /tareas/:id elimina la tarea (P1)
74
- - [ ] CA-001-05: POST /tareas sin título devuelve 400 con mensaje de error (P1)
75
- - [ ] CA-001-06: PATCH /tareas/:id con ID inexistente devuelve 404 (P2)
76
-
77
- ## 8. Fuera de Alcance
78
-
79
- ❌ Autenticación de usuarios
80
- ❌ Múltiples listas por usuario
81
- ❌ Prioridades o etiquetas
82
- ```
83
-
84
- ---
85
-
86
- ## Paso 3 — Aclarar ambigüedades
87
-
88
- ```
89
- /sdd.aclarar
90
- ```
91
-
92
- Claude encuentra 2 puntos sin definir y pregunta:
93
-
94
- ```
95
- 🔴 ACLARACIONES CRÍTICAS
96
-
97
- 1. [Datos] — ¿Las tareas tienen fecha de vencimiento?
98
- a) Sí, campo opcional `vence_en` (ISO 8601)
99
- b) No, solo título y estado
100
-
101
- 2. [Formato] — ¿Qué devuelve DELETE /tareas/:id?
102
- a) 204 sin body
103
- b) 200 con la tarea eliminada
104
- ```
105
-
106
- Respondes: `1.b, 2.a`
107
-
108
- Claude actualiza la spec y elimina los marcadores `[NECESITA_ACLARACION]`.
109
-
110
- ---
111
-
112
- ## Paso 4 — Plan técnico
113
-
114
- ```
115
- /sdd.planificar
116
- ```
117
-
118
- El arquitecto, el asesor de datos y el crítico trabajan en paralelo. Claude genera `.sdd/especificaciones/{ID}/plan.md`:
119
-
120
- ```
121
- ── Constitutional AI Check ─────────────────────────────
122
- ✅ Stack: Express + SQLite — alineado con constitución
123
- ✅ Patrones: módulos ES, funciones ≤40 líneas
124
- ✅ Sin dependencias nuevas más allá de express y better-sqlite3
125
- ─────────────────────────────────────────────────────────
126
-
127
- 📋 Plan técnico generado
128
- • 6 archivos afectados
129
- • 2 dependencias nuevas (express, better-sqlite3)
130
- • 4 decisiones técnicas
131
- • 1 riesgo identificado
132
-
133
- ⚠️ PUNTOS DESTACADOS:
134
- • Riesgo medio: SQLite no soporta concurrencia alta — documentado, aceptado
135
- para el scope actual (API local/dev)
136
-
137
- POR FAVOR REVISA EL PLAN:
138
- /sdd.planificar aprobar — continuar al desglose
139
- /sdd.planificar revisar — discutir cambios
140
- ```
141
-
142
- Revisas el plan en `.sdd/especificaciones/{ID}/plan.md`. Ves que el arquitecto propuso esta estructura:
143
-
144
- ```
145
- src/
146
- db.js ← inicialización de SQLite
147
- tareas.js ← lógica de negocio
148
- rutas.js ← endpoints Express
149
- app.js ← setup de Express
150
- server.js ← punto de entrada
151
- tests/
152
- tareas.test.js
153
- ```
154
-
155
- ```
156
- /sdd.planificar aprobar
157
- ```
158
-
159
- ---
160
-
161
- ## Paso 5 — Desglose en tareas
162
-
163
- ```
164
- /sdd.tareas
165
- ```
166
-
167
- ```
168
- ✅ 8 tareas generadas
169
-
170
- DISTRIBUCIÓN POR AGENTE:
171
- • arquitecto: 1 (estructura base)
172
- • desarrollador-backend: 5 (BD, lógica, rutas)
173
- • tester: 2 (tests unitarios + integración)
174
-
175
- COBERTURA:
176
- • 6/6 CAs cubiertos
177
- ```
178
-
179
- Las tareas generadas en `.sdd/especificaciones/{ID}/tareas.md`:
180
-
181
- ```
182
- T001 — Inicializar proyecto e instalar dependencias [arquitecto]
183
- T002 — Crear módulo de BD (db.js + migración inicial) [backend]
184
- T003 — Tests unitarios de la capa de datos [tester]
185
- T004 — Implementar lógica de tareas (tareas.js) [backend]
186
- T005 — Tests unitarios de lógica [tester]
187
- T006 — Implementar rutas Express (rutas.js) [backend]
188
- T007 — Setup de app.js y server.js [backend]
189
- T008 — Tests de integración (API completa) [tester]
190
- ```
191
-
192
- ---
193
-
194
- ## Paso 6 — Implementación
195
-
196
- ```
197
- /sdd.implementar
198
- ```
199
-
200
- Claude muestra el progreso en tiempo real:
201
-
202
- ```
203
- 🔧 T001 — Inicializar proyecto e instalar dependencias
204
- Agente: arquitecto (modelo: opus)
205
- Tiempo estimado: S
206
-
207
- ✅ T001 completada — Verificación: PASADA
208
-
209
- 🔧 T002 — Crear módulo de BD
210
- Agente: desarrollador-backend (modelo: sonnet)
211
-
212
- ── Validación de convenciones: src/db.js (fuentes: constitución, inferido) ──
213
- ✅ Sin violaciones
214
- ────────────────────────────────────────────────────────────────────────────
215
-
216
- ✅ T002 completada — Verificación: PASADA
217
-
218
- 🔧 T003 — Tests unitarios de la capa de datos
219
- Agente: tester (modelo: sonnet)
220
- ✅ T003 completada
221
-
222
- [...continúa para T004–T008...]
223
-
224
- ✅ T008 completada
225
- ```
226
-
227
- El código generado en `src/db.js`:
228
-
229
- ```javascript
230
- import Database from 'better-sqlite3'
231
- import { join, dirname } from 'node:path'
232
- import { fileURLToPath } from 'node:url'
233
-
234
- const __dirname = dirname(fileURLToPath(import.meta.url))
235
- const DB_PATH = join(__dirname, '..', 'tareas.db')
236
-
237
- let db
238
-
239
- export function getDb() {
240
- if (!db) {
241
- db = new Database(DB_PATH)
242
- db.pragma('journal_mode = WAL')
243
- inicializar(db)
244
- }
245
- return db
246
- }
247
-
248
- function inicializar(db) {
249
- db.exec(`
250
- CREATE TABLE IF NOT EXISTS tareas (
251
- id INTEGER PRIMARY KEY AUTOINCREMENT,
252
- titulo TEXT NOT NULL,
253
- completa INTEGER NOT NULL DEFAULT 0,
254
- creada_en TEXT NOT NULL DEFAULT (datetime('now'))
255
- )
256
- `)
257
- }
258
- ```
259
-
260
- Y en `src/tareas.js`:
261
-
262
- ```javascript
263
- import { getDb } from './db.js'
264
-
265
- export function listarTareas() {
266
- return getDb()
267
- .prepare('SELECT * FROM tareas ORDER BY creada_en DESC')
268
- .all()
269
- }
270
-
271
- export function crearTarea(titulo) {
272
- if (!titulo || titulo.trim().length === 0) {
273
- throw new Error('El título es obligatorio')
274
- }
275
- const stmt = getDb().prepare('INSERT INTO tareas (titulo) VALUES (?)')
276
- const result = stmt.run(titulo.trim())
277
- return getDb().prepare('SELECT * FROM tareas WHERE id = ?').get(result.lastInsertRowid)
278
- }
279
-
280
- export function completarTarea(id) {
281
- const tarea = getDb().prepare('SELECT * FROM tareas WHERE id = ?').get(id)
282
- if (!tarea) return null
283
- getDb().prepare('UPDATE tareas SET completa = 1 WHERE id = ?').run(id)
284
- return { ...tarea, completa: 1 }
285
- }
286
-
287
- export function eliminarTarea(id) {
288
- const result = getDb().prepare('DELETE FROM tareas WHERE id = ?').run(id)
289
- return result.changes > 0
290
- }
291
- ```
292
-
293
- ---
294
-
295
- ## Paso 7 — Verificación final
296
-
297
- Al terminar todas las tareas, Claude invoca automáticamente al revisor y corre los tests:
298
-
299
- ```
300
- 📊 Implementación Completada: 2026-06-09-api-lista-tareas
301
-
302
- Tareas: 8/8 ✅
303
- Tests: Jest — 14 pasados, 0 fallidos
304
- Cobertura: 87% (umbral: 80%) ✅
305
- Constitución: ✅
306
-
307
- Revisión del agente revisor:
308
- ✅ Todos los CAs cubiertos por tests
309
- ✅ Funciones ≤40 líneas (máx. encontrada: 18 líneas)
310
- 🟡 Sugerencia: añadir middleware de manejo de errores global (no bloqueante)
311
-
312
- SIGUIENTES PASOS:
313
- /sdd.verificar — verificación final contra spec original
314
- /sdd.snapshot — actualizar SNAPSHOT del producto
315
- ```
316
-
317
- ```
318
- /sdd.verificar
319
- ```
320
-
321
- ```
322
- ✅ Verificación completada
323
-
324
- CA-001-01: POST /tareas crea tarea ✅ test: "debería crear tarea con título"
325
- CA-001-02: GET /tareas devuelve ordenadas ✅ test: "debería listar en orden descendente"
326
- CA-001-03: PATCH completa la tarea ✅ test: "debería marcar como completa"
327
- CA-001-04: DELETE elimina la tarea ✅ test: "debería eliminar y devolver 204"
328
- CA-001-05: POST sin título → 400 ✅ test: "debería devolver 400 sin título"
329
- CA-001-06: PATCH ID inexistente → 404 ✅ test: "debería devolver 404 si no existe"
330
-
331
- 6/6 criterios de aceptación verificados ✅
332
- ```
333
-
334
- ---
335
-
336
- ## Resultado final
337
-
338
- ```
339
- mi-api-tareas/
340
- ├── src/
341
- │ ├── db.js ← BD SQLite
342
- │ ├── tareas.js ← lógica de negocio
343
- │ ├── rutas.js ← endpoints Express
344
- │ ├── app.js ← setup Express
345
- │ └── server.js ← punto de entrada
346
- ├── tests/
347
- │ └── tareas.test.js ← 14 tests, 87% cobertura
348
- ├── package.json
349
- ├── tareas.db ← BD generada en primera ejecución
350
- └── .sdd/
351
- ├── memoria/constitucion.md
352
- ├── especificaciones/2026-06-09-api-lista-tareas/
353
- │ ├── spec.md
354
- │ ├── plan.md
355
- │ ├── tareas.md
356
- │ └── checklist-spec.md
357
- └── SNAPSHOT.md
358
- ```
359
-
360
- **Lo que SDD-ES garantizó:**
361
- - Cada línea de código está trazada a un criterio de aceptación
362
- - El revisor verificó independientemente del implementador
363
- - La constitución se cumplió en cada decisión técnica
364
- - Los tests no son decorativos — cada CA tiene su test
365
-
366
- ---
367
-
368
- ## Próxima feature
369
-
370
- ```
371
- /sdd.especificar añadir prioridad a las tareas (alta/media/baja)
372
- ```
373
-
374
- El sistema detecta que hay una spec anterior completada, carga el contexto del proyecto (constitución + snapshot) y empieza desde cero — sin repetir preguntas ya respondidas.
375
-
376
- ---
377
-
378
- ## Ver también
379
-
380
- - [FLUJO.md](FLUJO.md) — diagrama completo del flujo
381
- - [AGENTES.md](AGENTES.md) — qué hace cada agente
382
- - [PERSONALIZACION.md](PERSONALIZACION.md) — ajustar modelos, activar/desactivar agentes
383
- - [FILOSOFIA.md](FILOSOFIA.md) — por qué SDD con IA
@@ -1,158 +0,0 @@
1
- # sdd-figma-mcp
2
-
3
- MCP server local para integración de Figma con proyectos que usan SDD-ES. Lo usa el agente `desarrollador-frontend` para analizar el sistema de diseño del proyecto, traer componentes de Figma y generar código adaptado — sin romper lo que ya existe.
4
-
5
- ## Qué hace
6
-
7
- | Herramienta | Qué resuelve |
8
- |---|---|
9
- | `analizar_sistema_diseño` | Lee tokens, colores, tipografía y componentes del proyecto local |
10
- | `evaluar_ui_existente` | Score 0-100 + problemas + sugerencias de mejora |
11
- | `conectar_figma` | Verifica PAT y metadata del archivo |
12
- | `listar_componentes` | Lista componentes publicados en el archivo Figma |
13
- | `traer_componente` | Detalle completo de un nodo: estructura, fills, texto, dimensiones |
14
- | `mapear_estilos` | Cruza colores/tipografía de Figma con tokens del proyecto |
15
- | `generar_componente` | Código React/Vue adaptado al sistema de diseño local |
16
- | `sugerir_mejoras` | Lista priorizada de mejoras al design system |
17
-
18
- ## Instalación
19
-
20
- ### 1. Sin dependencias — listo para ejecutar
21
-
22
- No hay `npm install`. El servidor usa exclusivamente módulos built-in de Node.js (`readline`, `fs`, `path`) y `fetch` nativo (disponible desde Node 18). El `package.json` es solo un descriptor — no instala nada.
23
-
24
- ### 2. Obtener el Personal Access Token de Figma
25
-
26
- 1. Abre Figma → Menú de usuario (esquina superior derecha) → **Settings**
27
- 2. Pestaña **Security** → **Personal access tokens** → **Generate new token**
28
- 3. Dale un nombre (ej. `sdd-figma-mcp`) y copia el token
29
-
30
- ### 3. Definir FIGMA_PAT como variable de entorno del sistema
31
-
32
- El MCP lee el token desde `process.env.FIGMA_PAT` — **no está hardcodeado en ningún archivo de configuración** para evitar que quede en el repositorio.
33
-
34
- Claude Code hereda las variables de entorno de la sesión donde se lanza, así que basta con definirla una vez en el sistema:
35
-
36
- **Windows (PowerShell, permanente para el usuario):**
37
- ```powershell
38
- [System.Environment]::SetEnvironmentVariable("FIGMA_PAT", "tu-token-aqui", "User")
39
- # Cierra y vuelve a abrir la terminal para que tome efecto
40
- ```
41
-
42
- **Windows (solo sesión actual):**
43
- ```powershell
44
- $env:FIGMA_PAT = "tu-token-aqui"
45
- ```
46
-
47
- **macOS / Linux (permanente):**
48
- ```bash
49
- echo 'export FIGMA_PAT="tu-token-aqui"' >> ~/.zshrc # o ~/.bashrc
50
- source ~/.zshrc
51
- ```
52
-
53
- > Si el proyecto tiene un `.env` que Claude Code carga automáticamente, también puedes agregar `FIGMA_PAT=tu-token` ahí — el proceso Node lo hereda igual.
54
-
55
- ### 4. Registrar el MCP en Claude Code
56
-
57
- Agrega esto a tu `.claude/settings.json` (o `~/.claude/settings.json` para uso global):
58
-
59
- ```json
60
- {
61
- "mcpServers": {
62
- "sdd-figma": {
63
- "command": "node",
64
- "args": ["/ruta/absoluta/al/sdd-lite/mcp-figma/src/index.js"]
65
- }
66
- }
67
- }
68
- ```
69
-
70
- No hay campo `env` — el servidor hereda `FIGMA_PAT` directamente del entorno del sistema (paso 3). Así el token nunca queda registrado en ningún archivo de configuración del repositorio.
71
-
72
- > Reemplaza `/ruta/absoluta/al/sdd-lite` con la ruta real donde instalaste SDD-ES.
73
- > En Windows usa barras invertidas dobles: `"c:\\\\Users\\\\usuario\\\\sdd-lite\\\\mcp-figma\\\\src\\\\index.js"`
74
-
75
- ### 5. Verificar
76
-
77
- Reinicia Claude Code y ejecuta en cualquier proyecto frontend:
78
-
79
- ```
80
- analizar_sistema_diseño({ project_root: "." })
81
- ```
82
-
83
- Deberías ver el perfil del sistema de diseño del proyecto.
84
-
85
- ## Cómo encontrar el file_key de Figma
86
-
87
- La URL de Figma tiene este formato:
88
-
89
- ```
90
- https://www.figma.com/file/ABCDEF123456/nombre-del-archivo?node-id=0:1
91
- ^^^^^^^^^^^^
92
- este es el file_key
93
- ```
94
-
95
- ## Cómo encontrar el node_id
96
-
97
- 1. Selecciona el frame o componente en Figma
98
- 2. La URL cambia a: `?node-id=123:456`
99
- 3. Ese valor (`123:456` o en formato `123-456`) es el `node_id`
100
-
101
- ## Flujo típico de uso
102
-
103
- ```
104
- # 1. Analiza lo que ya tiene el proyecto
105
- analizar_sistema_diseño({ project_root: "/mi/proyecto" })
106
-
107
- # 2. Conecta con el archivo de Figma
108
- conectar_figma({ file_key: "ABCDEF123456" })
109
-
110
- # 3. Lista los componentes disponibles
111
- listar_componentes({ file_key: "ABCDEF123456", filter: "Button" })
112
-
113
- # 4. Trae el componente que quieres implementar
114
- traer_componente({ file_key: "ABCDEF123456", node_id: "123:456" })
115
-
116
- # 5. Verifica que los estilos tienen equivalente en el proyecto
117
- mapear_estilos({ file_key: "ABCDEF123456", node_id: "123:456", project_root: "/mi/proyecto" })
118
-
119
- # 6. Genera el código adaptado
120
- generar_componente({ file_key: "ABCDEF123456", node_id: "123:456", project_root: "/mi/proyecto" })
121
- ```
122
-
123
- ## Stacks soportados
124
-
125
- | Framework | CSS | Estado |
126
- |---|---|---|
127
- | React / Next.js | Tailwind CSS | ✅ Completo |
128
- | React / Next.js | CSS Modules | ✅ Completo |
129
- | Vue 3 | Tailwind / Scoped CSS | ✅ Completo |
130
- | React / Next.js | styled-components | ⚠️ Parcial (genera CSS Module) |
131
- | Angular | Cualquiera | ⚠️ Genera React, ajusta manualmente |
132
- | Svelte | Cualquiera | 🔜 En roadmap |
133
-
134
- ## Variables de entorno
135
-
136
- | Variable | Requerida | Descripción |
137
- |---|---|---|
138
- | `FIGMA_PAT` | Sí | Personal Access Token de Figma |
139
-
140
- ## Estructura del proyecto
141
-
142
- ```
143
- mcp-figma/
144
- ├── src/
145
- │ ├── index.js ← Servidor MCP + definición de tools
146
- │ ├── mcp.js ← Protocolo JSON-RPC 2.0 sobre stdio (sin deps)
147
- │ ├── figma-client.js ← Cliente HTTP de la API de Figma
148
- │ ├── design-system-analyzer.js ← Análisis del sistema de diseño local
149
- │ ├── style-mapper.js ← Mapeo de estilos Figma ↔ tokens locales
150
- │ └── component-generator.js ← Generación de código por framework
151
- └── package.json ← Cero dependencias — solo descriptor
152
- ```
153
-
154
- ## Limitaciones conocidas
155
-
156
- - La detección de tokens en Tailwind usa análisis estático de texto (no ejecuta el módulo), por lo que configs muy dinámicas pueden no detectarse completamente
157
- - La generación de componentes es un punto de partida — siempre revisa accesibilidad, props faltantes y manejo de estado
158
- - La API de Figma Variables (tokens del sistema de diseño de Figma) requiere plan Professional o superior
@@ -1,7 +0,0 @@
1
- {
2
- "name": "sdd-figma-mcp",
3
- "version": "1.0.0",
4
- "description": "MCP server para integración de Figma con SDD-ES — cero dependencias externas",
5
- "type": "module",
6
- "main": "src/index.js"
7
- }