@romandp/context-memory-mcp 1.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/README.md +454 -0
- package/bin/mcp-memory.js +306 -0
- package/dist/config/paths.d.ts +10 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +41 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/db/init.d.ts +6 -0
- package/dist/db/init.d.ts.map +1 -0
- package/dist/db/init.js +37 -0
- package/dist/db/init.js.map +1 -0
- package/dist/db/migrations/runner.d.ts +9 -0
- package/dist/db/migrations/runner.d.ts.map +1 -0
- package/dist/db/migrations/runner.js +285 -0
- package/dist/db/migrations/runner.js.map +1 -0
- package/dist/db/schema.d.ts +51 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +496 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/http/routes.d.ts +3 -0
- package/dist/http/routes.d.ts.map +1 -0
- package/dist/http/routes.js +968 -0
- package/dist/http/routes.js.map +1 -0
- package/dist/http/server.d.ts +5 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +45 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/swagger.d.ts +2 -0
- package/dist/http/swagger.d.ts.map +1 -0
- package/dist/http/swagger.js +101 -0
- package/dist/http/swagger.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/budget.d.ts +22 -0
- package/dist/memory/budget.d.ts.map +1 -0
- package/dist/memory/budget.js +51 -0
- package/dist/memory/budget.js.map +1 -0
- package/dist/memory/facts.d.ts +3 -0
- package/dist/memory/facts.d.ts.map +1 -0
- package/dist/memory/facts.js +63 -0
- package/dist/memory/facts.js.map +1 -0
- package/dist/memory/rebuild.d.ts +4 -0
- package/dist/memory/rebuild.d.ts.map +1 -0
- package/dist/memory/rebuild.js +31 -0
- package/dist/memory/rebuild.js.map +1 -0
- package/dist/memory/response.d.ts +11 -0
- package/dist/memory/response.d.ts.map +1 -0
- package/dist/memory/response.js +20 -0
- package/dist/memory/response.js.map +1 -0
- package/dist/memory/summary.d.ts +3 -0
- package/dist/memory/summary.d.ts.map +1 -0
- package/dist/memory/summary.js +67 -0
- package/dist/memory/summary.js.map +1 -0
- package/dist/memory/toon.d.ts +20 -0
- package/dist/memory/toon.d.ts.map +1 -0
- package/dist/memory/toon.js +102 -0
- package/dist/memory/toon.js.map +1 -0
- package/dist/memory/view.d.ts +4 -0
- package/dist/memory/view.d.ts.map +1 -0
- package/dist/memory/view.js +7 -0
- package/dist/memory/view.js.map +1 -0
- package/dist/server/setup.d.ts +9 -0
- package/dist/server/setup.d.ts.map +1 -0
- package/dist/server/setup.js +291 -0
- package/dist/server/setup.js.map +1 -0
- package/dist/tools/audit.d.ts +2 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +22 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/context.d.ts +5 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +104 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/entry.d.ts +9 -0
- package/dist/tools/entry.d.ts.map +1 -0
- package/dist/tools/entry.js +214 -0
- package/dist/tools/entry.js.map +1 -0
- package/dist/tools/project.d.ts +4 -0
- package/dist/tools/project.d.ts.map +1 -0
- package/dist/tools/project.js +54 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/task.d.ts +4 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +49 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/types/context.d.ts +139 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/package.json +68 -0
package/README.md
ADDED
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
# MCP Memory Server
|
|
2
|
+
|
|
3
|
+
Servidor de memoria persistente para asistentes de IA vía **Model Context Protocol (MCP)**. Almacena y organiza planes SDD (Software Design Document) con la estructura **Proyecto → Entradas → Tareas**, todo en una base de datos **SQLite** local.
|
|
4
|
+
|
|
5
|
+
Expone tanto un transporte **MCP sobre STDIO** como una **API REST HTTP**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Arquitectura
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────────────────────────────┐
|
|
13
|
+
Cliente │ MCP Memory Server │
|
|
14
|
+
MCP ◄────► │ ┌──────────┐ ┌──────────────┐ │
|
|
15
|
+
(stdio) │ │ MCP over │ │ Express REST │ │
|
|
16
|
+
│ │ STDIO │ │ :3001 │ │
|
|
17
|
+
│ └────┬─────┘ └──────┬───────┘ │
|
|
18
|
+
│ └──────┬────────┘ │
|
|
19
|
+
│ ▼ │
|
|
20
|
+
│ ┌─────────────────┐ │
|
|
21
|
+
│ │ better-sqlite3 │ │
|
|
22
|
+
│ │ (WAL mode) │ │
|
|
23
|
+
│ └────────┬────────┘ │
|
|
24
|
+
└─────────────┼─────────────────────┘
|
|
25
|
+
▼
|
|
26
|
+
~/.local/share/mcp-memory/memory.db
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Estructura de datos
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
projects
|
|
33
|
+
├── id, name, description, status
|
|
34
|
+
│
|
|
35
|
+
├── sdd_entries
|
|
36
|
+
│ ├── id, project_id
|
|
37
|
+
│ ├── section (plan | design | tasks | general)
|
|
38
|
+
│ ├── title, content, status, parent_id
|
|
39
|
+
│ └── metadata (JSON)
|
|
40
|
+
│
|
|
41
|
+
├── tasks
|
|
42
|
+
│ ├── id, project_id, sdd_entry_id
|
|
43
|
+
│ ├── title, description
|
|
44
|
+
│ └── status, priority
|
|
45
|
+
│
|
|
46
|
+
├── design_decisions
|
|
47
|
+
│ ├── id, entry_id
|
|
48
|
+
│ ├── decision, rationale
|
|
49
|
+
│ └── alternatives_considered
|
|
50
|
+
│
|
|
51
|
+
├── entry_relationships
|
|
52
|
+
│ ├── id, source_entry_id, target_entry_id
|
|
53
|
+
│ └── relationship_type (depends_on|implements|related_to|supersedes)
|
|
54
|
+
│
|
|
55
|
+
├── classifications (polymorphic)
|
|
56
|
+
│ ├── classifiable_type (project | entry | task)
|
|
57
|
+
│ └── tag, confidence
|
|
58
|
+
│
|
|
59
|
+
├── audit_log
|
|
60
|
+
│ ├── id, entity_type, entity_id
|
|
61
|
+
│ ├── action (created | updated | deleted)
|
|
62
|
+
│ └── changes (JSON), project_id, timestamp
|
|
63
|
+
│
|
|
64
|
+
└── fts_entries (FTS5 virtual table)
|
|
65
|
+
├── entry_id, section, title, content
|
|
66
|
+
└── auto-sincronizada via triggers
|
|
67
|
+
|
|
68
|
+
_migrations (tracking de cambios de schema)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Tecnologías
|
|
72
|
+
|
|
73
|
+
| Capa | Tecnología |
|
|
74
|
+
|------|-----------|
|
|
75
|
+
| Lenguaje | TypeScript (ESM) |
|
|
76
|
+
| MCP SDK | `@modelcontextprotocol/sdk` |
|
|
77
|
+
| HTTP Server | Express 5 |
|
|
78
|
+
| Base de datos | SQLite vía `better-sqlite3` (WAL mode) |
|
|
79
|
+
| Validación | Zod |
|
|
80
|
+
| Tests | Vitest + Supertest |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Instalación
|
|
85
|
+
|
|
86
|
+
### Requisitos
|
|
87
|
+
|
|
88
|
+
- Node.js ≥ 18
|
|
89
|
+
- npm ≥ 9
|
|
90
|
+
|
|
91
|
+
### Instalación global desde release/npm
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Instalar última release publicada
|
|
95
|
+
npm install -g @romandp/context-memory-mcp
|
|
96
|
+
|
|
97
|
+
# Ver rutas resueltas y versión
|
|
98
|
+
mcp-memory paths
|
|
99
|
+
mcp-memory version
|
|
100
|
+
|
|
101
|
+
# Iniciar servidor
|
|
102
|
+
mcp-memory start
|
|
103
|
+
|
|
104
|
+
# Ver estado
|
|
105
|
+
mcp-memory status
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Uso sin instalación global
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npx -y @romandp/context-memory-mcp@latest stdio
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Upgrade / rollback
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Actualizar a última release
|
|
118
|
+
npm install -g @romandp/context-memory-mcp@latest
|
|
119
|
+
|
|
120
|
+
# Instalar versión concreta
|
|
121
|
+
npm install -g @romandp/context-memory-mcp@1.0.0
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Releases
|
|
125
|
+
|
|
126
|
+
- Cada tag `v*` publica paquete npm y crea GitHub Release mediante `.github/workflows/release.yml`
|
|
127
|
+
- El workflow requiere secreto `NPM_TOKEN`
|
|
128
|
+
- El artefacto `.tgz` de la release permite probar instalación sin clonar repo
|
|
129
|
+
|
|
130
|
+
### Desarrollo local
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git clone <repo>
|
|
134
|
+
cd context-memory-mcp
|
|
135
|
+
npm install
|
|
136
|
+
npm run build
|
|
137
|
+
node bin/mcp-memory.js start
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Migrar base de datos antigua
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
mcp-memory migrate-db --from /ruta/antigua/memory.db
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Uso
|
|
149
|
+
|
|
150
|
+
### CLI
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
mcp-memory start # Inicia en background
|
|
154
|
+
mcp-memory stop # Detiene el servidor
|
|
155
|
+
mcp-memory status # Muestra estado (PID, health)
|
|
156
|
+
mcp-memory restart # Reinicia
|
|
157
|
+
mcp-memory logs # Tail de logs
|
|
158
|
+
mcp-memory info # Información del proyecto
|
|
159
|
+
mcp-memory paths # Muestra rutas resueltas
|
|
160
|
+
mcp-memory version # Muestra versión instalada
|
|
161
|
+
mcp-memory rebuild-memory # Regenera summaries/facts compactos
|
|
162
|
+
mcp-memory migrate-db --from /ruta/db.sqlite
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
O via npm:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npm run start:bg # start en background
|
|
169
|
+
npm run stop # stop
|
|
170
|
+
npm run status # status
|
|
171
|
+
npm start # start en foreground
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### API REST
|
|
175
|
+
|
|
176
|
+
El servidor HTTP corre en `http://localhost:3001` (configurable con `HTTP_PORT`).
|
|
177
|
+
|
|
178
|
+
Documentación interactiva disponible en: `http://localhost:3001/api-docs`
|
|
179
|
+
|
|
180
|
+
> Todos los endpoints de listado soportan paginación con `?page=1&limit=50` (max 200).
|
|
181
|
+
> La respuesta incluye `pagination: { page, limit, total, totalPages }`.
|
|
182
|
+
|
|
183
|
+
#### Proyectos
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
GET /api/projects → Listar proyectos (?page=&limit=)
|
|
187
|
+
POST /api/projects → Crear proyecto { name, description? }
|
|
188
|
+
GET /api/projects/:id → Proyecto con entries + tasks + clasificaciones
|
|
189
|
+
PUT /api/projects/:id → Actualizar proyecto { name?, status?, description? }
|
|
190
|
+
DELETE /api/projects/:id → Eliminar proyecto (cascade)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### Entradas SDD
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
GET /api/projects/:pid/entries → Listar entradas (?section=&page=&limit=)
|
|
197
|
+
POST /api/projects/:pid/entries → Crear entrada { section, title, content? }
|
|
198
|
+
GET /api/projects/:pid/entries/search?q=texto → Buscar entradas en el proyecto (FTS5, ?page=&limit=)
|
|
199
|
+
GET /api/projects/:pid/entries/:eid → Obtener entrada + clasificaciones
|
|
200
|
+
PUT /api/projects/:pid/entries/:eid → Actualizar entrada
|
|
201
|
+
DELETE /api/projects/:pid/entries/:eid → Eliminar entrada
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### Búsqueda global
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
GET /api/entries/search?q=texto → Buscar entradas en todos los proyectos (FTS5, ?page=&limit=)
|
|
208
|
+
GET /api/entries/search?q=texto&view=compact → Resultados compactos optimizados para LLM
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### TOON y vistas compactas
|
|
212
|
+
|
|
213
|
+
Parámetros nuevos en rutas/tools compatibles:
|
|
214
|
+
|
|
215
|
+
- `view=full|summary|compact`
|
|
216
|
+
- `format=json|toon-r|toon-d`
|
|
217
|
+
- `max_items=<n>`
|
|
218
|
+
- `max_chars=<n>`
|
|
219
|
+
- `cursor=<last_id>`
|
|
220
|
+
|
|
221
|
+
Uso recomendado para agentes/LLM:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
curl "http://localhost:3001/api/entries/<eid>/context?view=compact&format=toon-r"
|
|
225
|
+
curl "http://localhost:3001/api/entries/search?q=release&view=compact&format=toon-d"
|
|
226
|
+
curl "http://localhost:3001/api/entries/batch?ids=e1,e2,e3&max_items=2"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Semántica:
|
|
230
|
+
|
|
231
|
+
- `full`: contrato legacy completo
|
|
232
|
+
- `summary`: respuesta resumida sin contenido largo
|
|
233
|
+
- `compact`: respuesta basada en summaries/facts derivadas
|
|
234
|
+
- `toon-r`: TOON legible para debug
|
|
235
|
+
- `toon-d`: TOON denso para mínimo tamaño
|
|
236
|
+
- `max_items`: corta arrays compactos y marca `truncated`
|
|
237
|
+
- `max_chars`: limita volumen aproximado de texto compacto
|
|
238
|
+
- `cursor`: continúa desde último `id` devuelto en respuesta previa
|
|
239
|
+
- `metrics`: cada respuesta compacta JSON incluye `bytes`, `chars`, `estimated_tokens`
|
|
240
|
+
|
|
241
|
+
Implementación actual:
|
|
242
|
+
|
|
243
|
+
- `summary_short` y `summary_dense` derivadas por entry
|
|
244
|
+
- `memory_facts` derivadas desde entries, decisiones y relaciones
|
|
245
|
+
- FTS5 compacta sobre `fts_entry_summaries` para búsquedas TOON/compact
|
|
246
|
+
- Fallback automático al índice legacy si faltan datos derivados
|
|
247
|
+
|
|
248
|
+
#### Contexto enriquecido
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
GET /api/entries/:eid/context → Entry + decisions + relationships
|
|
252
|
+
GET /api/entries/:eid/summary → Summary derivada compacta
|
|
253
|
+
GET /api/entries/:eid/compact → Contexto compacto/TOON
|
|
254
|
+
GET /api/entries/batch?ids=e1,e2 → Batch compacto por IDs
|
|
255
|
+
POST /api/entries/:eid/decisions → Registrar decisión de diseño { decision, rationale, alternatives_considered? }
|
|
256
|
+
POST /api/entries/:eid/relationships → Relacionar entries { target_entry_id, relationship_type }
|
|
257
|
+
GET /api/facts → Facts derivadas (?project_id=&entry_id=&kind=&page=&limit=&max_items=&max_chars=&cursor=)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
#### Tareas
|
|
261
|
+
|
|
262
|
+
```
|
|
263
|
+
GET /api/projects/:pid/tasks → Listar tareas (?entry_id=&page=&limit=)
|
|
264
|
+
POST /api/projects/:pid/tasks → Crear tarea { title, priority?, sdd_entry_id? }
|
|
265
|
+
PUT /api/projects/:pid/tasks/:tid → Actualizar tarea { status? }
|
|
266
|
+
DELETE /api/projects/:pid/tasks/:tid → Eliminar tarea
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
#### Auditoría
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
GET /api/audit → Historial de cambios (?entity_type=&entity_id=&project_id=&page=&limit=)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Clasificaciones
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
POST /api/classify → Añadir clasificación { classifiable_type, classifiable_id, tag, confidence }
|
|
279
|
+
GET /api/db/download → Descargar el fichero SQLite
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### MCP Tools
|
|
283
|
+
|
|
284
|
+
El servidor expone estas herramientas vía MCP (STDIO):
|
|
285
|
+
|
|
286
|
+
| Tool | Descripción |
|
|
287
|
+
|------|-------------|
|
|
288
|
+
| `project-create` | Crear proyecto |
|
|
289
|
+
| `project-list` | Listar proyectos (con paginación opcional) |
|
|
290
|
+
| `project-get` | Proyecto completo con entries y tasks |
|
|
291
|
+
| `entry-create` | Crear entrada SDD (plan/design/tasks/general) |
|
|
292
|
+
| `entry-get` | Listar entradas de un proyecto (con paginación opcional) |
|
|
293
|
+
| `entry-search` | Buscar entradas por texto (FTS5, con paginación opcional) |
|
|
294
|
+
| `entry-search-global` | Buscar entradas en todos los proyectos (FTS5, sin project_id) |
|
|
295
|
+
| `entry-update` | Actualizar entrada (title, content, status, section, parent_id) |
|
|
296
|
+
| `entry-delete` | Eliminar entrada |
|
|
297
|
+
| `entry-add-decision` | Registrar decisión de diseño |
|
|
298
|
+
| `entry-add-relationship` | Relacionar dos entradas |
|
|
299
|
+
| `entry-batch-get` | Obtener varias entradas compactas por ID |
|
|
300
|
+
| `entry-get-context` | Obtener entrada + decisions + relationships |
|
|
301
|
+
| `entry-get-summary` | Obtener summary derivada compacta |
|
|
302
|
+
| `task-create` | Crear tarea |
|
|
303
|
+
| `task-list` | Listar tareas de un proyecto (con paginación opcional) |
|
|
304
|
+
| `task-update` | Actualizar estado de tarea |
|
|
305
|
+
| `memory-facts-get` | Consultar facts derivadas |
|
|
306
|
+
| `audit-get` | Consultar historial de cambios (filtros: entity_type, entity_id, project_id) |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Configuración
|
|
311
|
+
|
|
312
|
+
Variables de entorno (fichero `.env`):
|
|
313
|
+
|
|
314
|
+
```env
|
|
315
|
+
HTTP_PORT=3001 # Puerto del servidor REST
|
|
316
|
+
DB_PATH=/ruta/memory.db # Override directo de base de datos
|
|
317
|
+
MCP_MEMORY_HOME=/ruta/base
|
|
318
|
+
LOG_PATH=/ruta/server.log
|
|
319
|
+
PID_PATH=/ruta/server.pid
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
Rutas por defecto sin overrides:
|
|
323
|
+
|
|
324
|
+
- Linux: `~/.local/share/mcp-memory/memory.db` y `~/.local/state/mcp-memory/`
|
|
325
|
+
- macOS: `~/Library/Application Support/mcp-memory/`
|
|
326
|
+
- Windows: `%LOCALAPPDATA%\mcp-memory\`
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Configuración para opencode
|
|
331
|
+
|
|
332
|
+
Para conectar este servidor MCP desde **opencode**, añade la siguiente configuración en tu `opencode.json` (global en `~/.config/opencode/opencode.jsonc` o local en la raíz del proyecto):
|
|
333
|
+
|
|
334
|
+
```json
|
|
335
|
+
{
|
|
336
|
+
"mcp": {
|
|
337
|
+
"context-memory-mcp": {
|
|
338
|
+
"type": "local",
|
|
339
|
+
"command": ["mcp-memory", "stdio"],
|
|
340
|
+
"enabled": true,
|
|
341
|
+
"env": {}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
> Requiere tener paquete instalado globalmente con `npm install -g @romandp/context-memory-mcp`, o usar un wrapper `npx` propio.
|
|
348
|
+
|
|
349
|
+
Ejemplo sin instalación global permanente:
|
|
350
|
+
|
|
351
|
+
```json
|
|
352
|
+
{
|
|
353
|
+
"mcp": {
|
|
354
|
+
"context-memory-mcp": {
|
|
355
|
+
"type": "local",
|
|
356
|
+
"command": ["npx", "-y", "@romandp/context-memory-mcp@latest", "stdio"],
|
|
357
|
+
"enabled": true,
|
|
358
|
+
"env": {}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
> **Nota:** Después de guardar los cambios, reinicia opencode para que la configuración surta efecto.
|
|
365
|
+
|
|
366
|
+
### Herramientas MCP disponibles
|
|
367
|
+
|
|
368
|
+
Una vez conectado, opencode tendrá acceso a estas herramientas:
|
|
369
|
+
|
|
370
|
+
| Tool | Descripción |
|
|
371
|
+
|------|-------------|
|
|
372
|
+
| `project-create` | Crear un proyecto nuevo |
|
|
373
|
+
| `project-list` | Listar todos los proyectos |
|
|
374
|
+
| `project-get` | Obtener un proyecto completo con entradas y tareas |
|
|
375
|
+
| `entry-create` | Crear una entrada SDD (plan/design/tasks/general) |
|
|
376
|
+
| `entry-get` | Obtener entradas de un proyecto |
|
|
377
|
+
| `entry-search` | Buscar entradas por texto (FTS5) |
|
|
378
|
+
| `entry-search-global` | Buscar entradas en todos los proyectos |
|
|
379
|
+
| `entry-update` | Actualizar una entrada (title, content, status, section, parent_id) |
|
|
380
|
+
| `entry-delete` | Eliminar una entrada |
|
|
381
|
+
| `entry-add-decision` | Registrar decisión de diseño |
|
|
382
|
+
| `entry-add-relationship` | Relacionar dos entradas |
|
|
383
|
+
| `entry-batch-get` | Obtener varias entradas compactas por ID |
|
|
384
|
+
| `entry-get-context` | Obtener entrada + decisions + relationships |
|
|
385
|
+
| `entry-get-summary` | Obtener summary derivada compacta |
|
|
386
|
+
| `task-create` | Crear una tarea |
|
|
387
|
+
| `task-list` | Listar tareas de un proyecto |
|
|
388
|
+
| `task-update` | Actualizar estado de una tarea |
|
|
389
|
+
| `memory-facts-get` | Consultar facts derivadas |
|
|
390
|
+
| `audit-get` | Consultar historial de cambios de entradas y tareas |
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Tests y calidad
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
npm test # Ejecutar tests (Vitest, 137 tests)
|
|
398
|
+
npm run test:watch # Modo watch
|
|
399
|
+
npm run lint # ESLint
|
|
400
|
+
npm run lint:fix # ESLint con auto-fix
|
|
401
|
+
npm run format # Prettier (check)
|
|
402
|
+
npm run format:fix # Prettier (formatear)
|
|
403
|
+
npm run type-check # TypeScript strict check
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Migraciones
|
|
409
|
+
|
|
410
|
+
El schema de la base de datos se gestiona mediante migraciones numeradas en `src/db/migrations/runner.ts`:
|
|
411
|
+
|
|
412
|
+
| Migración | Descripción |
|
|
413
|
+
|-----------|-------------|
|
|
414
|
+
| `001_initial_schema` | Tablas base: projects, sdd_entries, tasks, classifications |
|
|
415
|
+
| `002_add_fts5` | Búsqueda de texto completo (FTS5) con sincronización automática |
|
|
416
|
+
| `003_add_audit_log` | Auditoría de cambios con triggers en entries y tasks |
|
|
417
|
+
| `004_add_context_tables` | Tablas de contexto enriquecido: file_changes (legacy), design_decisions, entry_relationships |
|
|
418
|
+
| `005_add_compact_memory` | Summaries derivadas y memory facts para views compactas / TOON |
|
|
419
|
+
| `006_add_compact_memory_fts` | Índice FTS5 sobre summaries/keywords para búsqueda compacta |
|
|
420
|
+
|
|
421
|
+
Las migraciones se aplican automáticamente al iniciar el servidor.
|
|
422
|
+
La tabla `_migrations` registra cuáles se han ejecutado.
|
|
423
|
+
|
|
424
|
+
> Nota: `file_changes` puede seguir existiendo en bases de datos antiguas para preservar historial, pero ya no forma parte del modelo activo ni de la API/MCP pública.
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## Acceso a la base de datos
|
|
429
|
+
|
|
430
|
+
Primero obtén ruta real:
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
mcp-memory paths
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
En Linux/WSL, consulta SQLite así:
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
sqlite3 ~/.local/share/mcp-memory/memory.db "SELECT * FROM projects;"
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
Para abrirla en DBeaver desde Windows, haz una copia:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
cp ~/.local/share/mcp-memory/memory.db /tmp/memory-view.db
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
Y abre `\\wsl.localhost\Ubuntu-24.04\tmp\memory-view.db` en DBeaver.
|
|
449
|
+
|
|
450
|
+
O descárgala vía HTTP:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
curl -o memory-view.db http://localhost:3001/api/db/download
|
|
454
|
+
```
|