@justmpm/memory 0.1.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/dist/index.js ADDED
@@ -0,0 +1,582 @@
1
+ /**
2
+ * Memory MCP Server - Sistema de memória persistente para subagents
3
+ *
4
+ * Permite que subagents salvem e recuperem aprendizados entre sessões.
5
+ * Cada agent tem sua própria memória, armazenada em .claude/agent-memory/<agent-name>/MEMORY.md
6
+ *
7
+ * @see https://modelcontextprotocol.io/
8
+ */
9
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
10
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
12
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, } from "fs";
13
+ import { join, dirname } from "path";
14
+ import { fileURLToPath } from "url";
15
+ // ═══════════════════════════════════════════════════════════════════════════
16
+ // VERSÃO DO PROJETO
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+ /**
19
+ * Lê a versão do package.json dinamicamente
20
+ */
21
+ function getPackageVersion() {
22
+ try {
23
+ const __filename = fileURLToPath(import.meta.url);
24
+ const __dirname = dirname(__filename);
25
+ const packagePath = join(__dirname, "..", "package.json");
26
+ const packageJson = JSON.parse(readFileSync(packagePath, "utf-8"));
27
+ return packageJson.version || "0.1.0";
28
+ }
29
+ catch {
30
+ return "0.1.0";
31
+ }
32
+ }
33
+ const PACKAGE_VERSION = getPackageVersion();
34
+ // ═══════════════════════════════════════════════════════════════════════════
35
+ // FUNÇÕES UTILITÁRIAS
36
+ // ═══════════════════════════════════════════════════════════════════════════
37
+ /**
38
+ * Normaliza nome do agent para usar como nome de pasta
39
+ * Ex: "Sentinel" → "sentinel", "QA-Tester" → "qa-tester"
40
+ */
41
+ function normalizeAgentName(agentName) {
42
+ return agentName
43
+ .toLowerCase()
44
+ .replace(/[^a-z0-9]+/g, "-")
45
+ .replace(/^-|-$/g, "");
46
+ }
47
+ /**
48
+ * Retorna o caminho do diretório de memória para um agent
49
+ */
50
+ function getAgentMemoryDir(agentName) {
51
+ const normalizedName = normalizeAgentName(agentName);
52
+ return join(process.cwd(), ".claude", "agent-memory", normalizedName);
53
+ }
54
+ /**
55
+ * Retorna o caminho do arquivo MEMORY.md de um agent
56
+ */
57
+ function getAgentMemoryPath(agentName) {
58
+ return join(getAgentMemoryDir(agentName), "MEMORY.md");
59
+ }
60
+ /**
61
+ * Garante que o diretório existe
62
+ */
63
+ function ensureAgentMemoryDir(agentName) {
64
+ const dir = getAgentMemoryDir(agentName);
65
+ if (!existsSync(dir)) {
66
+ mkdirSync(dir, { recursive: true });
67
+ }
68
+ }
69
+ /**
70
+ * Formata timestamp para uso em entradas de memória
71
+ */
72
+ function formatTimestamp() {
73
+ const now = new Date();
74
+ return now.toISOString().replace("T", " ").slice(0, 19);
75
+ }
76
+ /**
77
+ * Limita memória a ~200 linhas (últimas entradas)
78
+ */
79
+ function limitMemoryLines(content, maxLines = 200) {
80
+ const lines = content.split("\n");
81
+ if (lines.length <= maxLines)
82
+ return content;
83
+ const keepCount = Math.floor(maxLines * 0.8); // 160 linhas
84
+ const removed = lines.length - keepCount;
85
+ return `# Memória (últimas ${keepCount} de ${lines.length} linhas)
86
+
87
+ [... ${removed} linhas anteriores removidas ...]
88
+
89
+ ${lines.slice(-keepCount).join("\n")}`;
90
+ }
91
+ /**
92
+ * Lista todos os agents que têm memória
93
+ */
94
+ function listAgentsWithMemory() {
95
+ const memoryRoot = join(process.cwd(), ".claude", "agent-memory");
96
+ if (!existsSync(memoryRoot))
97
+ return [];
98
+ try {
99
+ return readdirSync(memoryRoot).filter((name) => {
100
+ const memoryPath = join(memoryRoot, name, "MEMORY.md");
101
+ return existsSync(memoryPath);
102
+ });
103
+ }
104
+ catch {
105
+ return [];
106
+ }
107
+ }
108
+ // ═══════════════════════════════════════════════════════════════════════════
109
+ // HANDLERS DAS OPERAÇÕES
110
+ // ═══════════════════════════════════════════════════════════════════════════
111
+ /**
112
+ * Handler: read - Lê a memória do agent atual
113
+ */
114
+ async function handleRead(agentName) {
115
+ const memoryPath = getAgentMemoryPath(agentName);
116
+ if (!existsSync(memoryPath)) {
117
+ return `📝 Memória vazia para agent "${agentName}".
118
+
119
+ Use \`command="append", entry="..."\` para criar a primeira entrada.`;
120
+ }
121
+ try {
122
+ const content = readFileSync(memoryPath, "utf-8");
123
+ const lines = content.split("\n").length;
124
+ return `📝 Memória de "${agentName}" (${lines} linhas):
125
+
126
+ ─────────────────────────────────────────────────────────────────
127
+
128
+ ${content}`;
129
+ }
130
+ catch (error) {
131
+ return `❌ Erro ao ler memória: ${error.message}`;
132
+ }
133
+ }
134
+ /**
135
+ * Handler: write - Substitui toda a memória
136
+ */
137
+ async function handleWrite(agentName, content) {
138
+ try {
139
+ ensureAgentMemoryDir(agentName);
140
+ const limited = limitMemoryLines(content);
141
+ writeFileSync(getAgentMemoryPath(agentName), limited, "utf-8");
142
+ const lines = limited.split("\n").length;
143
+ return `✅ Memória de "${agentName}" atualizada (${lines} linhas).
144
+
145
+ ${lines >= 200 ? "⚠️ Memória atingiu o limite de 200 linhas." : ""}`;
146
+ }
147
+ catch (error) {
148
+ return `❌ Erro ao escrever memória: ${error.message}`;
149
+ }
150
+ }
151
+ /**
152
+ * Handler: append - Adiciona uma entrada no final
153
+ */
154
+ async function handleAppend(agentName, entry) {
155
+ try {
156
+ ensureAgentMemoryDir(agentName);
157
+ const memoryPath = getAgentMemoryPath(agentName);
158
+ // Lê conteúdo existente
159
+ let existingContent = "";
160
+ if (existsSync(memoryPath)) {
161
+ existingContent = readFileSync(memoryPath, "utf-8");
162
+ }
163
+ // Adiciona nova entrada com timestamp
164
+ const timestamp = formatTimestamp();
165
+ const newEntry = `\n## [${timestamp}]\n${entry}\n`;
166
+ const newContent = existingContent + newEntry;
167
+ // Salva com limite
168
+ const limited = limitMemoryLines(newContent);
169
+ writeFileSync(memoryPath, limited, "utf-8");
170
+ return `✅ Entrada adicionada à memória de "${agentName}".
171
+
172
+ **Timestamp:** ${timestamp}
173
+ **Entry:** ${entry.slice(0, 100)}${entry.length > 100 ? "..." : ""}`;
174
+ }
175
+ catch (error) {
176
+ return `❌ Erro ao adicionar entrada: ${error.message}`;
177
+ }
178
+ }
179
+ /**
180
+ * Handler: search - Busca texto na memória
181
+ */
182
+ async function handleSearch(agentName, query) {
183
+ const memoryPath = getAgentMemoryPath(agentName);
184
+ if (!existsSync(memoryPath)) {
185
+ return `📝 Memória vazia para agent "${agentName}".`;
186
+ }
187
+ try {
188
+ const content = readFileSync(memoryPath, "utf-8");
189
+ const lines = content.split("\n");
190
+ const queryLower = query.toLowerCase();
191
+ const matches = lines
192
+ .map((line, idx) => ({ line, idx }))
193
+ .filter(({ line }) => line.toLowerCase().includes(queryLower));
194
+ if (matches.length === 0) {
195
+ return `📝 Nenhuma ocorrência de "${query}" encontrada na memória de "${agentName}".`;
196
+ }
197
+ const results = matches
198
+ .slice(0, 20) // Máximo 20 resultados
199
+ .map(({ line, idx }) => ` L${idx + 1}: ${line}`)
200
+ .join("\n");
201
+ const more = matches.length > 20 ? `\n... e mais ${matches.length - 20} ocorrências` : "";
202
+ return `📝 Busca por "${query}" em "${agentName}" (${matches.length} ocorrências):
203
+
204
+ ${results}${more}`;
205
+ }
206
+ catch (error) {
207
+ return `❌ Erro ao buscar: ${error.message}`;
208
+ }
209
+ }
210
+ /**
211
+ * Handler: list - Lista todos os agents com memória
212
+ */
213
+ async function handleList() {
214
+ const agents = listAgentsWithMemory();
215
+ if (agents.length === 0) {
216
+ return `📝 Nenhum agent com memória neste projeto.
217
+
218
+ Diretório: .claude/agent-memory/`;
219
+ }
220
+ const agentList = agents
221
+ .map((name) => {
222
+ const path = join(".claude", "agent-memory", name, "MEMORY.md");
223
+ let lines = 0;
224
+ try {
225
+ lines = readFileSync(join(process.cwd(), path), "utf-8").split("\n").length;
226
+ }
227
+ catch { }
228
+ return ` • ${name} (${lines} linhas)`;
229
+ })
230
+ .join("\n");
231
+ return `📝 Agents com memória neste projeto (${agents.length}):
232
+
233
+ ${agentList}
234
+
235
+ Use o comando "read" de cada agent para ver o conteúdo.`;
236
+ }
237
+ // ═══════════════════════════════════════════════════════════════════════════
238
+ // SERVIDOR MCP
239
+ // ═══════════════════════════════════════════════════════════════════════════
240
+ // Cria o servidor MCP
241
+ const server = new Server({
242
+ name: "@justmpm/memory",
243
+ version: PACKAGE_VERSION,
244
+ }, {
245
+ capabilities: {
246
+ tools: {},
247
+ },
248
+ });
249
+ /**
250
+ * Handler: ListTools - Lista todas as tools disponíveis
251
+ */
252
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
253
+ return {
254
+ tools: [
255
+ {
256
+ name: "memory",
257
+ description: `
258
+ Gerencia memória persistente para subagents entre sessões.
259
+
260
+ **PROPÓSITO:** Permitir que agents salvem e recuperem aprendizados específicos do projeto entre diferentes sessões de trabalho. Cada agent mantém sua própria memória isolada.
261
+
262
+ **LOCALIZAÇÃO:** .claude/agent-memory/<agent-name>/MEMORY.md (nome do agent é normalizado: lowercase, hífens para espaços)
263
+
264
+ **LIMITE:** Máximo 200 linhas (quando excedido, mantém as últimas 160 entradas + cabeçalho de alerta)
265
+
266
+ ═══════════════════════════════════════════════════════════════
267
+ COMANDOS DISPONÍVEIS:
268
+ ═══════════════════════════════════════════════════════════════
269
+
270
+ 1. **read** - Lê a memória de um agent
271
+ Uso: Carregar contexto anterior ao iniciar uma sessão
272
+ - agent: (opcional) Nome do agent. Se não fornecido, usa "unknown"
273
+ - Retorna: Conteúdo completo do MEMORY.md com contagem de linhas
274
+ - Se não existir: Retorna mensagem de memória vazia com sugestão
275
+
276
+ 2. **write** - Substitui TODO o conteúdo da memória
277
+ Uso: Reorganizar, limpar ou reconstruir memória do zero
278
+ - agent: (opcional) Nome do agent
279
+ - content: (OBRIGATÓRIO) Novo conteúdo completo em markdown
280
+ - Aplica: Limite de 200 linhas automaticamente
281
+ - Retorna: Confirmação + contagem de linhas
282
+
283
+ 3. **append** - Adiciona entrada ao final (COM TIMESTAMP)
284
+ Uso: Salvar aprendizados incrementais sem perder histórico
285
+ - agent: (opcional) Nome do agent
286
+ - entry: (OBRIGATÓRIO) Texto a adicionar
287
+ - Formato automático: "## [YYYY-MM-DD HH:MM:SS]\\n<entry>"
288
+ - Aplica: Limite de 200 linhas automaticamente
289
+ - Retorna: Timestamp + preview da entrada
290
+
291
+ 4. **search** - Busca termo específico na memória
292
+ Uso: Encontrar informações rápidas sem ler tudo
293
+ - agent: (opcional) Nome do agent
294
+ - query: (OBRIGATÓRIO) Termo de busca (case-insensitive)
295
+ - Retorna: Máximo 20 ocorrências com número da linha
296
+ - Se não encontrado: Mensagem clara de "nenhuma ocorrência"
297
+
298
+ 5. **list** - Lista todos os agents com memória no projeto
299
+ Uso: Descobrir quais agents já usaram memória neste projeto
300
+ - Sem parâmetros adicionais
301
+ - Retorna: Lista com nome de cada agent + contagem de linhas
302
+
303
+ ═══════════════════════════════════════════════════════════════
304
+ QUANDO USAR CADA COMANDO:
305
+ ═══════════════════════════════════════════════════════════════
306
+
307
+ ✅ **USE READ:**
308
+ - Ao INICIAR uma sessão de trabalho
309
+ - Quando precisar entender o contexto anterior
310
+ - Antes de fazer decisões baseadas em memória passada
311
+
312
+ ✅ **USE APPEND:**
313
+ - Ao APRENDER algo novo e importante
314
+ - Ao descobrir padrões no código
315
+ - Ao encontrar bugs recorrentes
316
+ - Ao tomar decisões arquiteturais
317
+ - Para manter cronologia de descobertas
318
+
319
+ ✅ **USE WRITE:**
320
+ - Quando memória estiver muito grande (perto de 200 linhas)
321
+ - Para reorganizar e consolidar informações
322
+ - Para remover entradas obsoletas
323
+ - Para reestruturar seções (Padrões, Decisões, Bugs)
324
+
325
+ ✅ **USE SEARCH:**
326
+ - Para buscar informações específicas rapidamente
327
+ - Para verificar se algo já foi documentado
328
+ - Para encontrar padrões específicos (ex: "Zod", "TypeScript")
329
+
330
+ ✅ **USE LIST:**
331
+ - Para descobrir agents existentes no projeto
332
+ - Para ver quantos agents usaram memória
333
+ - Ao iniciar trabalho em projeto desconhecido
334
+
335
+ ═══════════════════════════════════════════════════════════════
336
+ EXEMPLOS DE USO:
337
+ ═══════════════════════════════════════════════════════════════
338
+
339
+ Exemplo 1 - Iniciar sessão e carregar memória:
340
+ { "command": "read", "agent": "sentinel" }
341
+
342
+ Exemplo 2 - Salvar padrão descoberto:
343
+ { "command": "append", "agent": "sentinel", "entry": "Padrão: Sempre use Zod para validar inputs do usuário em todos os componentes de formulário" }
344
+
345
+ Exemplo 3 - Salvar decisão arquitetural:
346
+ { "command": "append", "agent": "nexus", "entry": "Decisão: Usar Zustand para estado global (mais leve que Redux) - Projeto tem até 5 stores independentes" }
347
+
348
+ Exemplo 4 - Buscar informações sobre Zod:
349
+ { "command": "search", "agent": "sentinel", "query": "Zod" }
350
+
351
+ Exemplo 5 - Reorganizar memória grande:
352
+ { "command": "write", "agent": "sentinel", "content": "# Memória do Sentinel\\n\\n## Padrões\\n- Use Zod para validação\\n\\n## Bugs\\n- Bug XYZ: ocorre quando..." }
353
+
354
+ Exemplo 6 - Listar todos os agents:
355
+ { "command": "list" }
356
+
357
+ ═══════════════════════════════════════════════════════════════
358
+ BOAS PRÁTICAS (O QUE SALVAR):
359
+ ═══════════════════════════════════════════════════════════════
360
+
361
+ ✅ **SEMPRE salve:**
362
+ - Padrões de código descobertos (ex: "Sempre use 2 espaços de indentação em TSX")
363
+ - Decisões arquiteturais (ex: "Escolhemos Firestore em vez de PostgreSQL porque...")
364
+ - Bugs recorrentes (ex: "Erro X acontece quando...")
365
+ - Soluções para problemas específicos (ex: "Para resolver problema Y, use...")
366
+ - Configurações importantes (ex: "Firebase Auth usa Google Sign-In")
367
+ - Preferências do usuário (ex: "Matheus prefere estilos inline para componentes simples")
368
+
369
+ ✅ **Use markdown organizado:**
370
+ ## Padrões - Padrões de código e convenções
371
+ ## Decisões - Escolhas arquiteturais e trade-offs
372
+ ## Bugs - Problemas conhecidos e workarounds
373
+ ## Configurações - Configs e setup específicos
374
+ ## Preferências - Preferências pessoais do usuário
375
+
376
+ ✅ **Adicione contexto:**
377
+ - "No projeto X, use Y..." (especifica o projeto)
378
+ - "Ao trabalhar com componente Z..." (especifica o contexto)
379
+ - "Quando acontecer erro Y..." (especifica a condição)
380
+
381
+ ═══════════════════════════════════════════════════════════════
382
+ BOAS PRÁTICAS (O QUE NÃO SALVAR):
383
+ ═══════════════════════════════════════════════════════════════
384
+
385
+ ❌ **NÃO salve:**
386
+ - Coisas triviais (ex: "Hoje está chovendo")
387
+ - Informações que mudam frequentemente (ex: "Tem 3 arquivos na pasta")
388
+ - Coisas que são óbvias (ex: "O código precisa compilar")
389
+ - Informações duplicadas
390
+ - Logs de conversação
391
+ - Erros temporários que já foram resolvidos
392
+
393
+ ❌ **NÃO repita:**
394
+ - Se um padrão já está salvo, não salve novamente
395
+ - Use search para verificar antes de salvar
396
+
397
+ ═══════════════════════════════════════════════════════════════
398
+ IMPORTANTE:
399
+ ═══════════════════════════════════════════════════════════════
400
+
401
+ • O nome do agent é NORMALIZADO automaticamente:
402
+ - "Sentinel" → "sentinel"
403
+ - "QA-Tester" → "qa-tester"
404
+ - "My Agent" → "my-agent"
405
+
406
+ • O parâmetro 'agent' é OPCIONAL:
407
+ - Se não fornecido, usa "unknown" como nome padrão
408
+ - É recomendável SEMPRE fornecer o nome do agent atual
409
+
410
+ • Memória é específica por projeto:
411
+ - Cada projeto tem sua própria pasta .claude/agent-memory/
412
+ - Memórias de diferentes projetos não se misturam
413
+
414
+ • Quando a memória atinge 200 linhas:
415
+ - As primeiras entradas mais antigas são removidas automaticamente
416
+ - Mantém as últimas 160 linhas mais recentes
417
+ - Adiciona cabeçalho informando sobre a limpeza
418
+ - Use write para reorganizar se isso acontecer com frequência
419
+ `.trim(),
420
+ inputSchema: {
421
+ type: "object",
422
+ properties: {
423
+ command: {
424
+ type: "string",
425
+ enum: ["read", "write", "append", "search", "list"],
426
+ description: "Comando a executar. 'read' carrega memória, 'write' substitui tudo, 'append' adiciona entrada, 'search' busca termo, 'list' mostra agents.",
427
+ },
428
+ agent: {
429
+ type: "string",
430
+ description: 'Nome do agent (opcional, usa "unknown" se não fornecido). O nome será normalizado (lowercase, hífens). Ex: "Sentinel", "QA-Tester", "My Agent"',
431
+ },
432
+ content: {
433
+ type: "string",
434
+ description: 'Conteúdo completo em markdown para substituir a memória existente (OBRIGATÓRIO para "write"). Use para reorganizar, limpar ou reconstruir memória do zero.',
435
+ },
436
+ entry: {
437
+ type: "string",
438
+ description: 'Texto da entrada a adicionar no final da memória (OBRIGATÓRIO para "append"). Será prefixado automaticamente com timestamp "## [YYYY-MM-DD HH:MM:SS]". Use para salvar aprendizados incrementais.',
439
+ },
440
+ query: {
441
+ type: "string",
442
+ description: 'Termo ou padrão de busca case-insensitive (OBRIGATÓRIO para "search"). Retorna até 20 ocorrências com número da linha. Ex: "Zod", "bug", "Firebase"',
443
+ },
444
+ },
445
+ required: ["command"],
446
+ },
447
+ },
448
+ ],
449
+ };
450
+ });
451
+ /**
452
+ * Handler: CallTool - Executa uma tool
453
+ */
454
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
455
+ const { name, arguments: args } = request.params;
456
+ if (name !== "memory") {
457
+ throw new Error(`Tool desconhecida: ${name}`);
458
+ }
459
+ const command = args?.command;
460
+ const agentName = args?.agent || "unknown";
461
+ // Valida comando
462
+ const validCommands = ["read", "write", "append", "search", "list"];
463
+ if (!validCommands.includes(command)) {
464
+ return {
465
+ content: [
466
+ {
467
+ type: "text",
468
+ text: `❌ ERRO: Comando desconhecido "${command}"
469
+
470
+ COMANDOS DISPONÍVEIS:
471
+
472
+ 1. read - Lê a memória de um agent
473
+ 2. write - Substitui todo o conteúdo da memória
474
+ 3. append - Adiciona uma entrada ao final (com timestamp)
475
+ 4. search - Busca um termo na memória
476
+ 5. list - Lista todos os agents com memória no projeto
477
+
478
+ PARA MAIS DETALHES, CONSULTE A DESCRIÇÃO DA TOOL "memory"
479
+ `,
480
+ },
481
+ ],
482
+ };
483
+ }
484
+ // Executa comando específico
485
+ let result;
486
+ switch (command) {
487
+ case "read": {
488
+ result = await handleRead(agentName);
489
+ break;
490
+ }
491
+ case "write": {
492
+ const content = args?.content;
493
+ if (!content) {
494
+ result = `❌ ERRO: O parâmetro "content" é OBRIGATÓRIO para o comando "write".
495
+
496
+ EXEMPLO DE USO CORRETO:
497
+ {
498
+ "command": "write",
499
+ "agent": "sentinel",
500
+ "content": "# Memória do Sentinel\\n\\n## Padrões\\n- Sempre use Zod para validação\\n\\n## Bugs\\n- Bug XYZ ocorre quando..."
501
+ }
502
+
503
+ DICA: Use "write" para reorganizar memória grande ou reconstruir do zero.
504
+ Para adicionar uma entrada preservando o histórico, use "append".
505
+ `;
506
+ break;
507
+ }
508
+ result = await handleWrite(agentName, content);
509
+ break;
510
+ }
511
+ case "append": {
512
+ const entry = args?.entry;
513
+ if (!entry) {
514
+ result = `❌ ERRO: O parâmetro "entry" é OBRIGATÓRIO para o comando "append".
515
+
516
+ EXEMPLO DE USO CORRETO:
517
+ {
518
+ "command": "append",
519
+ "agent": "sentinel",
520
+ "entry": "Padrão descoberto: Sempre use Zod para validar inputs do usuário em todos os componentes de formulário"
521
+ }
522
+
523
+ DICA: Use "append" para salvar aprendizados incrementais. O timestamp é adicionado automaticamente no formato:
524
+ ## [2026-02-09 12:34:56]
525
+ Sua entrada aqui
526
+
527
+ Para salvar informações mais longas ou estruturadas, considere usar "write".
528
+ `;
529
+ break;
530
+ }
531
+ result = await handleAppend(agentName, entry);
532
+ break;
533
+ }
534
+ case "search": {
535
+ const query = args?.query;
536
+ if (!query) {
537
+ result = `❌ ERRO: O parâmetro "query" é OBRIGATÓRIO para o comando "search".
538
+
539
+ EXEMPLO DE USO CORRETO:
540
+ {
541
+ "command": "search",
542
+ "agent": "sentinel",
543
+ "query": "Zod"
544
+ }
545
+
546
+ DICA: A busca é case-insensitive e retorna até 20 ocorrências com o número da linha.
547
+ Exemplos de busca úteis: "padrão", "bug", "TypeScript", "Firebase", "erro"
548
+ `;
549
+ break;
550
+ }
551
+ result = await handleSearch(agentName, query);
552
+ break;
553
+ }
554
+ case "list": {
555
+ result = await handleList();
556
+ break;
557
+ }
558
+ default:
559
+ result = `❌ Comando desconhecido: ${command}`;
560
+ }
561
+ return {
562
+ content: [
563
+ {
564
+ type: "text",
565
+ text: result,
566
+ },
567
+ ],
568
+ };
569
+ });
570
+ // ═══════════════════════════════════════════════════════════════════════════
571
+ // INICIALIZAÇÃO
572
+ // ═══════════════════════════════════════════════════════════════════════════
573
+ async function main() {
574
+ const transport = new StdioServerTransport();
575
+ await server.connect(transport);
576
+ // Não faz log aqui pois o servidor se comunica via stdio
577
+ }
578
+ main().catch((error) => {
579
+ console.error("Erro fatal ao iniciar servidor:", error);
580
+ process.exit(1);
581
+ });
582
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "memory": {
4
+ "command": "node",
5
+ "args": [
6
+ "D:\\Users\\Matheus Pimenta\\Pictures\\Pacotes-Pessoais\\mcps-ai\\memory\\dist\\index.js"
7
+ ]
8
+ }
9
+ }
10
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@justmpm/memory",
3
+ "version": "0.1.0",
4
+ "description": "MCP Server para gerenciar memória persistente de subagents",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "memory-mcp": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "dev": "tsx src/index.ts",
14
+ "watch": "tsx watch src/index.ts"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "model-context-protocol",
19
+ "memory",
20
+ "agents",
21
+ "justmpm"
22
+ ],
23
+ "author": "Koda AI Studio",
24
+ "license": "MIT",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/justmpm/memory-mcp"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "dependencies": {
33
+ "@modelcontextprotocol/sdk": "^1.0.4"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.10.2",
37
+ "tsx": "^4.19.2",
38
+ "typescript": "^5.7.2"
39
+ }
40
+ }