oden-forge 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +75 -0
- package/.claude/commands/oden/architect.md +204 -0
- package/.claude/commands/oden/checklist.md +199 -0
- package/.claude/commands/oden/daily.md +223 -0
- package/.claude/commands/oden/debug.md +203 -0
- package/.claude/commands/oden/epic.md +224 -0
- package/.claude/commands/oden/git.md +259 -0
- package/.claude/commands/oden/help.md +304 -0
- package/.claude/commands/oden/init-agents.md +268 -0
- package/.claude/commands/oden/init-mcp.md +460 -0
- package/.claude/commands/oden/init.md +495 -0
- package/.claude/commands/oden/mcp.md +585 -0
- package/.claude/commands/oden/prd.md +134 -0
- package/.claude/commands/oden/research.md +207 -0
- package/.claude/commands/oden/review.md +146 -0
- package/.claude/commands/oden/spec.md +539 -0
- package/.claude/commands/oden/sync.md +286 -0
- package/.claude/commands/oden/tasks.md +156 -0
- package/.claude/commands/oden/test.md +200 -0
- package/.claude/commands/oden/work.md +791 -0
- package/.claude/epics/.gitkeep +0 -0
- package/.claude/hooks/README.md +130 -0
- package/.claude/hooks/bash-worktree-fix.sh +189 -0
- package/.claude/prds/.gitkeep +0 -0
- package/.claude/rules/agent-coordination.md +224 -0
- package/.claude/rules/branch-operations.md +147 -0
- package/.claude/rules/datetime.md +118 -0
- package/.claude/rules/frontmatter-operations.md +58 -0
- package/.claude/rules/github-operations.md +89 -0
- package/.claude/rules/oden-methodology.md +111 -0
- package/.claude/rules/path-standards.md +155 -0
- package/.claude/rules/standard-patterns.md +174 -0
- package/.claude/rules/strip-frontmatter.md +82 -0
- package/.claude/rules/worktree-operations.md +136 -0
- package/.claude/scripts/oden/blocked.sh +72 -0
- package/.claude/scripts/oden/epic-list.sh +101 -0
- package/.claude/scripts/oden/epic-show.sh +91 -0
- package/.claude/scripts/oden/epic-status.sh +90 -0
- package/.claude/scripts/oden/help.sh +71 -0
- package/.claude/scripts/oden/in-progress.sh +74 -0
- package/.claude/scripts/oden/init.sh +192 -0
- package/.claude/scripts/oden/next.sh +65 -0
- package/.claude/scripts/oden/prd-list.sh +89 -0
- package/.claude/scripts/oden/prd-status.sh +63 -0
- package/.claude/scripts/oden/search.sh +71 -0
- package/.claude/scripts/oden/standup.sh +89 -0
- package/.claude/scripts/oden/status.sh +42 -0
- package/.claude/scripts/oden/validate.sh +101 -0
- package/.claude/settings.json +27 -0
- package/MIGRATION.md +217 -0
- package/README.md +368 -0
- package/bin/install.js +155 -0
- package/bin/migrate.js +191 -0
- package/bin/oden-forge.js +114 -0
- package/bin/post-install.js +47 -0
- package/bin/pre-uninstall.js +108 -0
- package/install.sh +231 -0
- package/package.json +76 -0
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, LS, Glob
|
|
3
|
+
description: Gestionar MCPs - instalar, verificar estado, actualizar y recomendar MCPs para el proyecto
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Oden Forge - MCP Management
|
|
7
|
+
|
|
8
|
+
Gestiona Model Context Protocol (MCP) servers para potenciar el desarrollo con herramientas externas.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/oden:mcp [subcommand] [args]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Subcomandos
|
|
17
|
+
|
|
18
|
+
| Subcomando | Descripción |
|
|
19
|
+
|------------|-------------|
|
|
20
|
+
| `status` | Mostrar MCPs configurados y su estado |
|
|
21
|
+
| `recommend` | Recomendar MCPs basado en el stack del proyecto |
|
|
22
|
+
| `install [mcp]` | Instalar un MCP específico o interactivo |
|
|
23
|
+
| `update` | Actualizar MCPs instalados a última versión |
|
|
24
|
+
| (vacío) | Equivale a `status` |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## `/oden:mcp status`
|
|
29
|
+
|
|
30
|
+
Muestra el estado actual de MCPs configurados.
|
|
31
|
+
|
|
32
|
+
### Proceso
|
|
33
|
+
|
|
34
|
+
1. Leer configuración global de `~/.claude.json` (campo `mcpServers`)
|
|
35
|
+
2. Leer configuración de proyecto `.mcp.json` en la raíz del proyecto
|
|
36
|
+
3. Leer settings de `~/.claude/settings.json` (campo `mcpServers`)
|
|
37
|
+
4. Combinar y mostrar estado
|
|
38
|
+
|
|
39
|
+
### Detección de MCPs
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Config global
|
|
43
|
+
cat ~/.claude.json 2>/dev/null | python3 -c "
|
|
44
|
+
import json, sys
|
|
45
|
+
try:
|
|
46
|
+
data = json.load(sys.stdin)
|
|
47
|
+
servers = data.get('mcpServers', {})
|
|
48
|
+
for name, config in servers.items():
|
|
49
|
+
stype = config.get('type', 'command')
|
|
50
|
+
print(f' global | {name:<24} | {stype}')
|
|
51
|
+
except: pass
|
|
52
|
+
"
|
|
53
|
+
|
|
54
|
+
# Config proyecto
|
|
55
|
+
cat .mcp.json 2>/dev/null | python3 -c "
|
|
56
|
+
import json, sys
|
|
57
|
+
try:
|
|
58
|
+
data = json.load(sys.stdin)
|
|
59
|
+
servers = data.get('mcpServers', {})
|
|
60
|
+
for name, config in servers.items():
|
|
61
|
+
stype = config.get('type', 'command')
|
|
62
|
+
print(f' project | {name:<24} | {stype}')
|
|
63
|
+
except: pass
|
|
64
|
+
"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Output
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
MCP STATUS
|
|
71
|
+
==========
|
|
72
|
+
|
|
73
|
+
Scope | MCP | Type
|
|
74
|
+
----------|--------------------------|--------
|
|
75
|
+
global | context7 | http
|
|
76
|
+
global | pencil | http
|
|
77
|
+
project | supabase | command
|
|
78
|
+
project | playwright | command
|
|
79
|
+
|
|
80
|
+
Total: 4 MCPs configurados (2 global, 2 proyecto)
|
|
81
|
+
|
|
82
|
+
Tip: Usa /oden:mcp recommend para ver MCPs sugeridos para tu stack.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## `/oden:mcp recommend`
|
|
88
|
+
|
|
89
|
+
Detecta el stack del proyecto y recomienda MCPs relevantes.
|
|
90
|
+
|
|
91
|
+
### Detección de Stack
|
|
92
|
+
|
|
93
|
+
Analizar archivos en la raíz del proyecto para detectar tecnologías:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Detectar stack del proyecto
|
|
97
|
+
STACK=""
|
|
98
|
+
|
|
99
|
+
# Next.js / React
|
|
100
|
+
[ -f "next.config.js" ] || [ -f "next.config.mjs" ] || [ -f "next.config.ts" ] && STACK="$STACK,nextjs"
|
|
101
|
+
|
|
102
|
+
# React (sin Next)
|
|
103
|
+
[ -f "package.json" ] && grep -q '"react"' package.json 2>/dev/null && STACK="$STACK,react"
|
|
104
|
+
|
|
105
|
+
# React Native / Expo
|
|
106
|
+
[ -f "app.json" ] && grep -q '"expo"' app.json 2>/dev/null && STACK="$STACK,expo"
|
|
107
|
+
[ -f "package.json" ] && grep -q '"react-native"' package.json 2>/dev/null && STACK="$STACK,react-native"
|
|
108
|
+
|
|
109
|
+
# Flutter
|
|
110
|
+
[ -f "pubspec.yaml" ] && STACK="$STACK,flutter"
|
|
111
|
+
|
|
112
|
+
# Swift / iOS
|
|
113
|
+
[ -d "*.xcodeproj" ] || [ -f "Package.swift" ] && STACK="$STACK,swift"
|
|
114
|
+
|
|
115
|
+
# Supabase
|
|
116
|
+
[ -d "supabase" ] || ([ -f "package.json" ] && grep -q '"@supabase"' package.json 2>/dev/null) && STACK="$STACK,supabase"
|
|
117
|
+
|
|
118
|
+
# Stripe
|
|
119
|
+
[ -f "package.json" ] && grep -q '"stripe"' package.json 2>/dev/null && STACK="$STACK,stripe"
|
|
120
|
+
|
|
121
|
+
# Python
|
|
122
|
+
[ -f "requirements.txt" ] || [ -f "pyproject.toml" ] || [ -f "Pipfile" ] && STACK="$STACK,python"
|
|
123
|
+
|
|
124
|
+
# Node.js
|
|
125
|
+
[ -f "package.json" ] && STACK="$STACK,nodejs"
|
|
126
|
+
|
|
127
|
+
# Tailwind
|
|
128
|
+
[ -f "tailwind.config.js" ] || [ -f "tailwind.config.ts" ] && STACK="$STACK,tailwind"
|
|
129
|
+
|
|
130
|
+
# Playwright (already using)
|
|
131
|
+
[ -f "playwright.config.ts" ] || [ -f "playwright.config.js" ] && STACK="$STACK,playwright"
|
|
132
|
+
|
|
133
|
+
echo "Detected: $STACK"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### MCP Catalog
|
|
137
|
+
|
|
138
|
+
#### Tier 1 - Universal (recomendado para todos los proyectos)
|
|
139
|
+
|
|
140
|
+
| MCP | Descripcion | Config Type |
|
|
141
|
+
|-----|-------------|-------------|
|
|
142
|
+
| `context7` | Documentacion actualizada de librerias | http |
|
|
143
|
+
| `pencil` | Editor de diseno para web/mobile | http |
|
|
144
|
+
|
|
145
|
+
#### Tier 2 - Stack-Specific (segun tecnologias detectadas)
|
|
146
|
+
|
|
147
|
+
| MCP | Se recomienda cuando | Config Type |
|
|
148
|
+
|-----|----------------------|-------------|
|
|
149
|
+
| `supabase` | Detecta `supabase/` dir o `@supabase` en deps | command (npx) |
|
|
150
|
+
| `playwright` | Proyecto web sin playwright ya configurado | command (npx) |
|
|
151
|
+
| `chrome-devtools` | Proyecto web (debug de UI) | command (npx) |
|
|
152
|
+
| `figma` | Proyecto con UI (web o mobile) | http |
|
|
153
|
+
| `vercel` | Detecta next.config o vercel.json | http |
|
|
154
|
+
| `notion` | Cualquier proyecto (productividad) | http |
|
|
155
|
+
|
|
156
|
+
#### Tier 3 - Specialized (por necesidad especifica)
|
|
157
|
+
|
|
158
|
+
| MCP | Se recomienda cuando | Config Type |
|
|
159
|
+
|-----|----------------------|-------------|
|
|
160
|
+
| `stripe` | Detecta `stripe` en deps | command (npx) |
|
|
161
|
+
| `ios-simulator` | Detecta React Native, Expo, o Swift en macOS | command (npx) |
|
|
162
|
+
| `expo` | Detecta Expo en deps | command (npx) |
|
|
163
|
+
| `sentry` | Detecta `@sentry` en deps | command (npx) |
|
|
164
|
+
| `github` | Cualquier proyecto con git remote | http |
|
|
165
|
+
|
|
166
|
+
### Recommendation Logic
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
POR CADA MCP en el catalogo:
|
|
170
|
+
SI ya esta instalado:
|
|
171
|
+
marcar como "instalado"
|
|
172
|
+
SI su condicion de stack aplica:
|
|
173
|
+
marcar como "recomendado"
|
|
174
|
+
SI NO:
|
|
175
|
+
marcar como "disponible"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Output
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
MCP RECOMMENDATIONS
|
|
182
|
+
====================
|
|
183
|
+
|
|
184
|
+
Stack detectado: nextjs, react, supabase, tailwind, nodejs
|
|
185
|
+
|
|
186
|
+
Tier 1 - Universal:
|
|
187
|
+
[installed] context7 - Documentacion de librerias
|
|
188
|
+
[recommend] pencil - Editor de diseno
|
|
189
|
+
|
|
190
|
+
Tier 2 - Para tu stack:
|
|
191
|
+
[installed] supabase - Gestion de BD Supabase
|
|
192
|
+
[recommend] chrome-devtools - Debug de UI en Chrome
|
|
193
|
+
[recommend] vercel - Deploy y gestion Vercel
|
|
194
|
+
[recommend] playwright - Testing E2E
|
|
195
|
+
|
|
196
|
+
Tier 3 - Especializados:
|
|
197
|
+
[available] stripe - Pagos con Stripe
|
|
198
|
+
[available] notion - Documentacion en Notion
|
|
199
|
+
[available] sentry - Monitoreo de errores
|
|
200
|
+
|
|
201
|
+
Instalar: /oden:mcp install <nombre>
|
|
202
|
+
Instalar todos recomendados: /oden:mcp install --recommended
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## `/oden:mcp install [mcp]`
|
|
208
|
+
|
|
209
|
+
Instala un MCP especifico o permite seleccion interactiva.
|
|
210
|
+
|
|
211
|
+
### Argumentos
|
|
212
|
+
|
|
213
|
+
- `<nombre>` - Nombre del MCP a instalar (ej: `context7`, `supabase`)
|
|
214
|
+
- `--recommended` - Instalar todos los MCPs marcados como "recomendado"
|
|
215
|
+
- (vacío) - Mostrar lista interactiva para seleccionar
|
|
216
|
+
|
|
217
|
+
### Configuraciones de Instalacion
|
|
218
|
+
|
|
219
|
+
Cada MCP tiene una configuracion predefinida. Al instalar:
|
|
220
|
+
|
|
221
|
+
1. Preguntar nivel de instalacion:
|
|
222
|
+
- **Global** (`~/.claude.json`) - Disponible en todos los proyectos
|
|
223
|
+
- **Proyecto** (`.mcp.json`) - Solo este proyecto
|
|
224
|
+
|
|
225
|
+
2. Agregar configuracion JSON al archivo correspondiente
|
|
226
|
+
|
|
227
|
+
3. Indicar si requiere credenciales y como obtenerlas
|
|
228
|
+
|
|
229
|
+
### MCP Configs (Referencia de Instalacion)
|
|
230
|
+
|
|
231
|
+
#### context7
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"context7": {
|
|
235
|
+
"type": "http",
|
|
236
|
+
"url": "https://mcp.context7.com/mcp"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
- **Scope recomendado:** Global
|
|
241
|
+
- **Credenciales:** Ninguna (uso gratuito)
|
|
242
|
+
|
|
243
|
+
#### pencil
|
|
244
|
+
```json
|
|
245
|
+
{
|
|
246
|
+
"pencil": {
|
|
247
|
+
"type": "http",
|
|
248
|
+
"url": "https://mcp.pencil.li/"
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
- **Scope recomendado:** Global
|
|
253
|
+
- **Credenciales:** Cuenta Pencil (OAuth en primer uso)
|
|
254
|
+
|
|
255
|
+
#### supabase
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"supabase": {
|
|
259
|
+
"command": "npx",
|
|
260
|
+
"args": [
|
|
261
|
+
"-y",
|
|
262
|
+
"@supabase/mcp-server-supabase@latest",
|
|
263
|
+
"--read-only",
|
|
264
|
+
"--project-ref=<PROJECT_REF>"
|
|
265
|
+
],
|
|
266
|
+
"env": {
|
|
267
|
+
"SUPABASE_ACCESS_TOKEN": "<ACCESS_TOKEN>"
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
- **Scope recomendado:** Proyecto
|
|
273
|
+
- **Credenciales:** Access Token + Project Ref
|
|
274
|
+
- **Obtener:** https://supabase.com/dashboard/account/tokens
|
|
275
|
+
|
|
276
|
+
#### playwright
|
|
277
|
+
```json
|
|
278
|
+
{
|
|
279
|
+
"playwright": {
|
|
280
|
+
"command": "npx",
|
|
281
|
+
"args": ["-y", "@anthropic/mcp-server-playwright@latest"]
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
- **Scope recomendado:** Proyecto
|
|
286
|
+
- **Credenciales:** Ninguna
|
|
287
|
+
|
|
288
|
+
#### chrome-devtools
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"chrome-devtools": {
|
|
292
|
+
"command": "npx",
|
|
293
|
+
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
- **Scope recomendado:** Global
|
|
298
|
+
- **Credenciales:** Ninguna (Chrome debe estar instalado)
|
|
299
|
+
|
|
300
|
+
#### figma
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"figma": {
|
|
304
|
+
"type": "http",
|
|
305
|
+
"url": "https://mcp.figma.com/mcp"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
- **Scope recomendado:** Global
|
|
310
|
+
- **Credenciales:** Cuenta Figma (OAuth en primer uso)
|
|
311
|
+
|
|
312
|
+
#### vercel
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"vercel": {
|
|
316
|
+
"type": "http",
|
|
317
|
+
"url": "https://mcp.vercel.com/"
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
- **Scope recomendado:** Global
|
|
322
|
+
- **Credenciales:** Cuenta Vercel (OAuth en primer uso)
|
|
323
|
+
|
|
324
|
+
#### notion
|
|
325
|
+
```json
|
|
326
|
+
{
|
|
327
|
+
"notion": {
|
|
328
|
+
"type": "http",
|
|
329
|
+
"url": "https://mcp.notion.com/mcp"
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
- **Scope recomendado:** Global
|
|
334
|
+
- **Credenciales:** Cuenta Notion (OAuth en primer uso)
|
|
335
|
+
|
|
336
|
+
#### stripe
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"stripe": {
|
|
340
|
+
"command": "npx",
|
|
341
|
+
"args": ["-y", "@stripe/mcp@latest"],
|
|
342
|
+
"env": {
|
|
343
|
+
"STRIPE_SECRET_KEY": "<SECRET_KEY>"
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
- **Scope recomendado:** Proyecto
|
|
349
|
+
- **Credenciales:** Stripe Secret Key
|
|
350
|
+
- **Obtener:** https://dashboard.stripe.com/apikeys
|
|
351
|
+
|
|
352
|
+
#### ios-simulator
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"ios-simulator": {
|
|
356
|
+
"command": "npx",
|
|
357
|
+
"args": ["-y", "@anthropic/mcp-server-ios-simulator@latest"]
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
- **Scope recomendado:** Global
|
|
362
|
+
- **Credenciales:** Ninguna (requiere Xcode + macOS)
|
|
363
|
+
|
|
364
|
+
#### expo
|
|
365
|
+
```json
|
|
366
|
+
{
|
|
367
|
+
"expo": {
|
|
368
|
+
"command": "npx",
|
|
369
|
+
"args": ["-y", "@anthropic/mcp-server-expo@latest"]
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
- **Scope recomendado:** Proyecto
|
|
374
|
+
- **Credenciales:** Ninguna
|
|
375
|
+
|
|
376
|
+
#### sentry
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"sentry": {
|
|
380
|
+
"command": "npx",
|
|
381
|
+
"args": ["-y", "@sentry/mcp-server@latest"],
|
|
382
|
+
"env": {
|
|
383
|
+
"SENTRY_AUTH_TOKEN": "<AUTH_TOKEN>"
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
- **Scope recomendado:** Proyecto
|
|
389
|
+
- **Credenciales:** Sentry Auth Token
|
|
390
|
+
- **Obtener:** https://sentry.io/settings/auth-tokens/
|
|
391
|
+
|
|
392
|
+
#### github
|
|
393
|
+
```json
|
|
394
|
+
{
|
|
395
|
+
"github": {
|
|
396
|
+
"type": "http",
|
|
397
|
+
"url": "https://mcp.github.com/mcp"
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
```
|
|
401
|
+
- **Scope recomendado:** Global
|
|
402
|
+
- **Credenciales:** Cuenta GitHub (OAuth en primer uso)
|
|
403
|
+
|
|
404
|
+
### Proceso de Instalacion
|
|
405
|
+
|
|
406
|
+
1. **Validar MCP nombre** - Verificar que existe en el catalogo
|
|
407
|
+
2. **Verificar si ya instalado** - Leer configs existentes
|
|
408
|
+
3. **Preguntar scope** - Global o proyecto (usar recomendado como default)
|
|
409
|
+
4. **Solicitar credenciales** - Si el MCP las requiere, indicar donde obtenerlas y pedir al usuario
|
|
410
|
+
5. **Escribir configuracion** - Agregar al archivo JSON correspondiente
|
|
411
|
+
6. **Verificar** - Confirmar que se escribio correctamente
|
|
412
|
+
|
|
413
|
+
### Escritura de Config
|
|
414
|
+
|
|
415
|
+
Para archivos JSON existentes, hacer merge del mcpServers:
|
|
416
|
+
|
|
417
|
+
```python
|
|
418
|
+
# Pseudocodigo
|
|
419
|
+
config = read_json(config_file) or {}
|
|
420
|
+
mcp_servers = config.get("mcpServers", {})
|
|
421
|
+
mcp_servers[mcp_name] = mcp_config
|
|
422
|
+
config["mcpServers"] = mcp_servers
|
|
423
|
+
write_json(config_file, config)
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
Para `.mcp.json` de proyecto (si no existe, crear):
|
|
427
|
+
|
|
428
|
+
```json
|
|
429
|
+
{
|
|
430
|
+
"mcpServers": {
|
|
431
|
+
"<nombre>": { ... }
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Para `~/.claude.json` global (merge con existente):
|
|
437
|
+
|
|
438
|
+
Leer el archivo, parsear JSON, agregar al campo `mcpServers`, escribir de vuelta.
|
|
439
|
+
|
|
440
|
+
### Output
|
|
441
|
+
|
|
442
|
+
```
|
|
443
|
+
MCP INSTALL: context7
|
|
444
|
+
======================
|
|
445
|
+
|
|
446
|
+
Scope: Global (~/.claude.json)
|
|
447
|
+
Credenciales: Ninguna requerida
|
|
448
|
+
|
|
449
|
+
Configuracion agregada:
|
|
450
|
+
"context7": {
|
|
451
|
+
"type": "http",
|
|
452
|
+
"url": "https://mcp.context7.com/mcp"
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
Reinicia Claude Code para activar el MCP.
|
|
456
|
+
|
|
457
|
+
Verificar despues de reiniciar: /mcp
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Output con credenciales requeridas
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
MCP INSTALL: supabase
|
|
464
|
+
======================
|
|
465
|
+
|
|
466
|
+
Este MCP requiere credenciales:
|
|
467
|
+
|
|
468
|
+
1. SUPABASE_ACCESS_TOKEN
|
|
469
|
+
Obtener en: https://supabase.com/dashboard/account/tokens
|
|
470
|
+
|
|
471
|
+
2. PROJECT_REF
|
|
472
|
+
Encontrar en: Dashboard > Settings > General > Reference ID
|
|
473
|
+
|
|
474
|
+
Proporciona los valores para continuar, o usa /oden:mcp install supabase
|
|
475
|
+
de nuevo cuando los tengas.
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## `/oden:mcp update`
|
|
481
|
+
|
|
482
|
+
Actualiza MCPs de tipo command (npx) a su ultima version.
|
|
483
|
+
|
|
484
|
+
### Proceso
|
|
485
|
+
|
|
486
|
+
1. Leer MCPs configurados (global + proyecto)
|
|
487
|
+
2. Identificar los de tipo `command` que usan `npx`
|
|
488
|
+
3. Verificar que sus paquetes usen `@latest`
|
|
489
|
+
4. Si alguno tiene version fija, actualizar a `@latest`
|
|
490
|
+
|
|
491
|
+
### Output
|
|
492
|
+
|
|
493
|
+
```
|
|
494
|
+
MCP UPDATE
|
|
495
|
+
==========
|
|
496
|
+
|
|
497
|
+
Verificando MCPs de tipo command...
|
|
498
|
+
|
|
499
|
+
supabase - @supabase/mcp-server-supabase@latest (ya actualizado)
|
|
500
|
+
playwright - @anthropic/mcp-server-playwright@0.3.0 -> @latest (actualizado)
|
|
501
|
+
|
|
502
|
+
1 MCP actualizado. Reinicia Claude Code para aplicar.
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
Para MCPs de tipo HTTP no se requiere actualizacion (son servicios remotos).
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## Deteccion Automatica de Stack
|
|
510
|
+
|
|
511
|
+
La deteccion se basa en archivos presentes en el proyecto:
|
|
512
|
+
|
|
513
|
+
| Indicador | Stack Detectado |
|
|
514
|
+
|-----------|-----------------|
|
|
515
|
+
| `next.config.*` | Next.js |
|
|
516
|
+
| `package.json` con `"react"` | React |
|
|
517
|
+
| `app.json` con `"expo"` | Expo |
|
|
518
|
+
| `package.json` con `"react-native"` | React Native |
|
|
519
|
+
| `pubspec.yaml` | Flutter |
|
|
520
|
+
| `*.xcodeproj` o `Package.swift` | Swift/iOS |
|
|
521
|
+
| `supabase/` dir | Supabase |
|
|
522
|
+
| `package.json` con `"stripe"` | Stripe |
|
|
523
|
+
| `requirements.txt` o `pyproject.toml` | Python |
|
|
524
|
+
| `tailwind.config.*` | Tailwind CSS |
|
|
525
|
+
| `vercel.json` | Vercel |
|
|
526
|
+
| `package.json` con `"@sentry"` | Sentry |
|
|
527
|
+
| `.sentryclirc` | Sentry |
|
|
528
|
+
| `playwright.config.*` | Playwright |
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Reinicio de Claude Code
|
|
533
|
+
|
|
534
|
+
Despues de instalar o actualizar MCPs:
|
|
535
|
+
|
|
536
|
+
```
|
|
537
|
+
IMPORTANTE: Reinicia Claude Code para que los MCPs se carguen.
|
|
538
|
+
|
|
539
|
+
Opciones:
|
|
540
|
+
1. Salir con /exit y volver a entrar
|
|
541
|
+
2. Usar Cmd+Shift+P > "Reload Window" (si usas VS Code)
|
|
542
|
+
|
|
543
|
+
Despues de reiniciar, verifica con: /mcp
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## Error Handling
|
|
549
|
+
|
|
550
|
+
### MCP no encontrado
|
|
551
|
+
```
|
|
552
|
+
No se encontro MCP: "{nombre}"
|
|
553
|
+
|
|
554
|
+
MCPs disponibles:
|
|
555
|
+
context7, pencil, supabase, playwright, chrome-devtools,
|
|
556
|
+
figma, vercel, notion, stripe, ios-simulator, expo, sentry, github
|
|
557
|
+
|
|
558
|
+
Uso: /oden:mcp install <nombre>
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### Config file no es JSON valido
|
|
562
|
+
```
|
|
563
|
+
El archivo {file} no contiene JSON valido.
|
|
564
|
+
Creando backup en {file}.backup y generando nuevo archivo.
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
### MCP ya instalado
|
|
568
|
+
```
|
|
569
|
+
MCP "{nombre}" ya esta configurado en {scope}.
|
|
570
|
+
|
|
571
|
+
Config actual:
|
|
572
|
+
{config_json}
|
|
573
|
+
|
|
574
|
+
Para reinstalar: elimina la entrada y ejecuta /oden:mcp install {nombre}
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## Notas
|
|
580
|
+
|
|
581
|
+
- Los MCPs HTTP se conectan a servicios remotos y requieren OAuth en primer uso
|
|
582
|
+
- Los MCPs NPX ejecutan procesos locales y pueden necesitar API keys como variables de entorno
|
|
583
|
+
- La configuracion global (`~/.claude.json`) aplica a todos los proyectos
|
|
584
|
+
- La configuracion de proyecto (`.mcp.json`) solo aplica al proyecto actual
|
|
585
|
+
- Siempre verificar con `/mcp` despues de reiniciar para confirmar que los MCPs estan activos
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, LS
|
|
3
|
+
description: Crear PRD con brainstorming inteligente (nativo, sin CCPM)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PRD - Product Requirements Document
|
|
7
|
+
|
|
8
|
+
Crea un PRD completo con brainstorming inteligente y contexto del proyecto.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
```
|
|
12
|
+
/oden:prd <feature_name>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Preflight
|
|
16
|
+
|
|
17
|
+
Silently validate:
|
|
18
|
+
|
|
19
|
+
1. **Feature name**: Must be kebab-case (lowercase, numbers, hyphens, starts with letter).
|
|
20
|
+
- If invalid: "Feature name must be kebab-case. Examples: user-auth, payment-v2"
|
|
21
|
+
|
|
22
|
+
2. **Existing PRD**: Check `.claude/prds/$ARGUMENTS.md`
|
|
23
|
+
- If exists, ask to overwrite
|
|
24
|
+
|
|
25
|
+
3. **Directory**: Create `.claude/prds/` if needed
|
|
26
|
+
|
|
27
|
+
## Context Gathering
|
|
28
|
+
|
|
29
|
+
Before brainstorming, silently scan for project context:
|
|
30
|
+
|
|
31
|
+
1. **Technical context** (if available):
|
|
32
|
+
- Read `docs/reference/technical-decisions.md` for stack/architecture
|
|
33
|
+
- Read `docs/reference/competitive-analysis.md` for market context
|
|
34
|
+
- Read any existing module specs in `docs/reference/modules/`
|
|
35
|
+
|
|
36
|
+
2. **Existing PRDs**: Scan `.claude/prds/` for related features
|
|
37
|
+
- Identify potential overlaps or dependencies
|
|
38
|
+
|
|
39
|
+
3. **Project CLAUDE.md**: Read for project conventions
|
|
40
|
+
|
|
41
|
+
This context informs smarter questions and better PRD quality.
|
|
42
|
+
|
|
43
|
+
## Brainstorming Session
|
|
44
|
+
|
|
45
|
+
You are a product manager creating a PRD for: **$ARGUMENTS**
|
|
46
|
+
|
|
47
|
+
### Smart Questions
|
|
48
|
+
Ask 3-5 focused questions based on project context. Adapt questions to what you already know:
|
|
49
|
+
|
|
50
|
+
- If technical-decisions.md exists: Skip stack questions, focus on feature-specific concerns
|
|
51
|
+
- If competitive-analysis exists: Reference competitors in questions
|
|
52
|
+
- If related PRDs exist: Ask about integration/overlap
|
|
53
|
+
|
|
54
|
+
**Question areas:**
|
|
55
|
+
- Problem: What specific user pain does this solve?
|
|
56
|
+
- Users: Who benefits most? (reference existing personas if available)
|
|
57
|
+
- Scope: What's MVP vs full vision?
|
|
58
|
+
- Constraints: Timeline, budget, technical limitations?
|
|
59
|
+
- Success: How do we measure this worked?
|
|
60
|
+
|
|
61
|
+
### PRD Creation
|
|
62
|
+
|
|
63
|
+
After gathering answers, create the PRD.
|
|
64
|
+
|
|
65
|
+
#### File: `.claude/prds/$ARGUMENTS.md`
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
---
|
|
69
|
+
name: $ARGUMENTS
|
|
70
|
+
description: [One-line summary]
|
|
71
|
+
status: backlog
|
|
72
|
+
created: [Real datetime from: date -u +"%Y-%m-%dT%H:%M:%SZ"]
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
# PRD: $ARGUMENTS
|
|
76
|
+
|
|
77
|
+
## Executive Summary
|
|
78
|
+
[Value proposition and brief overview]
|
|
79
|
+
|
|
80
|
+
## Problem Statement
|
|
81
|
+
[What problem, why now, evidence/data]
|
|
82
|
+
|
|
83
|
+
## User Stories
|
|
84
|
+
[Personas, journeys, acceptance criteria per story]
|
|
85
|
+
|
|
86
|
+
## Requirements
|
|
87
|
+
|
|
88
|
+
### Functional Requirements
|
|
89
|
+
[Core features with clear acceptance criteria]
|
|
90
|
+
|
|
91
|
+
### Non-Functional Requirements
|
|
92
|
+
[Performance, security, scalability, accessibility]
|
|
93
|
+
|
|
94
|
+
## Success Criteria
|
|
95
|
+
[Measurable KPIs and metrics]
|
|
96
|
+
|
|
97
|
+
## Constraints & Assumptions
|
|
98
|
+
[Technical, timeline, resource limitations]
|
|
99
|
+
|
|
100
|
+
## Out of Scope
|
|
101
|
+
[What we explicitly won't build]
|
|
102
|
+
|
|
103
|
+
## Dependencies
|
|
104
|
+
[External and internal dependencies]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Quality Checks
|
|
108
|
+
|
|
109
|
+
Before saving, verify:
|
|
110
|
+
- All sections complete (no placeholders)
|
|
111
|
+
- User stories have acceptance criteria
|
|
112
|
+
- Success criteria are measurable
|
|
113
|
+
- Out of scope is explicit
|
|
114
|
+
|
|
115
|
+
## Output
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
PRD created: .claude/prds/$ARGUMENTS.md
|
|
119
|
+
|
|
120
|
+
Summary:
|
|
121
|
+
- [problem in one sentence]
|
|
122
|
+
- [number] user stories
|
|
123
|
+
- [number] functional requirements
|
|
124
|
+
- [key constraint]
|
|
125
|
+
|
|
126
|
+
Next: /oden:epic $ARGUMENTS
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Important
|
|
130
|
+
|
|
131
|
+
- Get REAL datetime: `date -u +"%Y-%m-%dT%H:%M:%SZ"`
|
|
132
|
+
- Never use placeholder dates
|
|
133
|
+
- Leverage existing project context for smarter brainstorming
|
|
134
|
+
- Keep brainstorming focused (3-5 questions, not 10+)
|