Day 1: "Build the user authentication system"
Agent: [Builds JWT auth, creates users table, implements refresh tokens] Day 2: "Continue from yesterday"
Agent: "I don't have context from previous sessions. Can you paste what we did?"
Day 1: "Build the user authentication system"
Agent: [Builds JWT auth, creates users table, implements refresh tokens] Day 2: "Continue from yesterday"
Agent: "I don't have context from previous sessions. Can you paste what we did?"
Day 1: "Build the user authentication system"
Agent: [Builds JWT auth, creates users table, implements refresh tokens] Day 2: "Continue from yesterday"
Agent: "I don't have context from previous sessions. Can you paste what we did?"
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ AI Agent │ │ MCP Memory │ │ Storage │
│ (Claude Code) │◄───────►│ Server │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ AI Agent │ │ MCP Memory │ │ Storage │
│ (Claude Code) │◄───────►│ Server │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ AI Agent │ │ MCP Memory │ │ Storage │
│ (Claude Code) │◄───────►│ Server │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
npm install -g @example/mcp-memory-server
npm install -g @example/mcp-memory-server
npm install -g @example/mcp-memory-server
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs/promises";
import path from "path"; const MEMORY_FILE = path.join(process.env.HOME, ".mcp-memory", "memories.json"); const server = new McpServer({ name: "memory", version: "1.0.0"
}); // Ensure memory file exists
async function initMemory() { await fs.mkdir(path.dirname(MEMORY_FILE), { recursive: true }); try { await fs.access(MEMORY_FILE); } catch { await fs.writeFile(MEMORY_FILE, JSON.stringify([])); }
} // Tool: remember
server.tool( "remember", { content: z.string().describe("Information to store"), tags: z.array(z.string()).describe("Tags for retrieval (e.g., ['backend', 'auth'])"), agent: z.string().optional().describe("Agent name for tagging") }, async ({ content, tags, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const memory = { id: Date.now().toString(), content, tags, agent, timestamp: new Date().toISOString() }; memories.push(memory); await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2)); return { content: [{ type: "text", text: `Stored memory with tags: ${tags.join(", ")}` }] }; }
); // Tool: recall
server.tool( "recall", { query: z.string().describe("Search query or tag to find"), agent: z.string().optional().describe("Filter by agent name") }, async ({ query, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories.filter(m => (m.content.toLowerCase().includes(query.toLowerCase()) || m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()))) && (!agent || m.agent === agent) ); return { content: [{ type: "text", text: results.length === 0 ? "No memories found" : results.map(m => `[${m.timestamp}] ${m.content}`).join("\n\n") }] }; }
); // Tool: search
server.tool( "search", { tags: z.array(z.string()).describe("Tags to search for"), limit: z.number().optional().default(10) }, async ({ tags, limit }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories .filter(m => tags.some(t => m.tags.includes(t))) .slice(0, limit); return { content: [{ type: "text", text: results.map(m => `[${m.agent || "unknown"}] ${m.content}`).join("\n\n") }] }; }
); // Tool: rollback
server.tool( "rollback", { agent: z.string().describe("Agent name to rollback"), timestamp: z.string().describe("Rollback to this timestamp") }, async ({ agent, timestamp }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const rolledBack = memories.filter(m => m.agent !== agent || new Date(m.timestamp) <= new Date(timestamp) ); await fs.writeFile(MEMORY_FILE, JSON.stringify(rolledBack, null, 2)); return { content: [{ type: "text", text: `Rolled back ${agent} to ${timestamp}` }] }; }
); const transport = new StdioServerTransport();
await server.connect(transport);
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs/promises";
import path from "path"; const MEMORY_FILE = path.join(process.env.HOME, ".mcp-memory", "memories.json"); const server = new McpServer({ name: "memory", version: "1.0.0"
}); // Ensure memory file exists
async function initMemory() { await fs.mkdir(path.dirname(MEMORY_FILE), { recursive: true }); try { await fs.access(MEMORY_FILE); } catch { await fs.writeFile(MEMORY_FILE, JSON.stringify([])); }
} // Tool: remember
server.tool( "remember", { content: z.string().describe("Information to store"), tags: z.array(z.string()).describe("Tags for retrieval (e.g., ['backend', 'auth'])"), agent: z.string().optional().describe("Agent name for tagging") }, async ({ content, tags, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const memory = { id: Date.now().toString(), content, tags, agent, timestamp: new Date().toISOString() }; memories.push(memory); await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2)); return { content: [{ type: "text", text: `Stored memory with tags: ${tags.join(", ")}` }] }; }
); // Tool: recall
server.tool( "recall", { query: z.string().describe("Search query or tag to find"), agent: z.string().optional().describe("Filter by agent name") }, async ({ query, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories.filter(m => (m.content.toLowerCase().includes(query.toLowerCase()) || m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()))) && (!agent || m.agent === agent) ); return { content: [{ type: "text", text: results.length === 0 ? "No memories found" : results.map(m => `[${m.timestamp}] ${m.content}`).join("\n\n") }] }; }
); // Tool: search
server.tool( "search", { tags: z.array(z.string()).describe("Tags to search for"), limit: z.number().optional().default(10) }, async ({ tags, limit }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories .filter(m => tags.some(t => m.tags.includes(t))) .slice(0, limit); return { content: [{ type: "text", text: results.map(m => `[${m.agent || "unknown"}] ${m.content}`).join("\n\n") }] }; }
); // Tool: rollback
server.tool( "rollback", { agent: z.string().describe("Agent name to rollback"), timestamp: z.string().describe("Rollback to this timestamp") }, async ({ agent, timestamp }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const rolledBack = memories.filter(m => m.agent !== agent || new Date(m.timestamp) <= new Date(timestamp) ); await fs.writeFile(MEMORY_FILE, JSON.stringify(rolledBack, null, 2)); return { content: [{ type: "text", text: `Rolled back ${agent} to ${timestamp}` }] }; }
); const transport = new StdioServerTransport();
await server.connect(transport);
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs/promises";
import path from "path"; const MEMORY_FILE = path.join(process.env.HOME, ".mcp-memory", "memories.json"); const server = new McpServer({ name: "memory", version: "1.0.0"
}); // Ensure memory file exists
async function initMemory() { await fs.mkdir(path.dirname(MEMORY_FILE), { recursive: true }); try { await fs.access(MEMORY_FILE); } catch { await fs.writeFile(MEMORY_FILE, JSON.stringify([])); }
} // Tool: remember
server.tool( "remember", { content: z.string().describe("Information to store"), tags: z.array(z.string()).describe("Tags for retrieval (e.g., ['backend', 'auth'])"), agent: z.string().optional().describe("Agent name for tagging") }, async ({ content, tags, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const memory = { id: Date.now().toString(), content, tags, agent, timestamp: new Date().toISOString() }; memories.push(memory); await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2)); return { content: [{ type: "text", text: `Stored memory with tags: ${tags.join(", ")}` }] }; }
); // Tool: recall
server.tool( "recall", { query: z.string().describe("Search query or tag to find"), agent: z.string().optional().describe("Filter by agent name") }, async ({ query, agent }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories.filter(m => (m.content.toLowerCase().includes(query.toLowerCase()) || m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()))) && (!agent || m.agent === agent) ); return { content: [{ type: "text", text: results.length === 0 ? "No memories found" : results.map(m => `[${m.timestamp}] ${m.content}`).join("\n\n") }] }; }
); // Tool: search
server.tool( "search", { tags: z.array(z.string()).describe("Tags to search for"), limit: z.number().optional().default(10) }, async ({ tags, limit }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const results = memories .filter(m => tags.some(t => m.tags.includes(t))) .slice(0, limit); return { content: [{ type: "text", text: results.map(m => `[${m.agent || "unknown"}] ${m.content}`).join("\n\n") }] }; }
); // Tool: rollback
server.tool( "rollback", { agent: z.string().describe("Agent name to rollback"), timestamp: z.string().describe("Rollback to this timestamp") }, async ({ agent, timestamp }) => { await initMemory(); const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8")); const rolledBack = memories.filter(m => m.agent !== agent || new Date(m.timestamp) <= new Date(timestamp) ); await fs.writeFile(MEMORY_FILE, JSON.stringify(rolledBack, null, 2)); return { content: [{ type: "text", text: `Rolled back ${agent} to ${timestamp}` }] }; }
); const transport = new StdioServerTransport();
await server.connect(transport);
node memory-server.js
node memory-server.js
node memory-server.js
Yapay zeka bellek araçlarına erişiminiz var: remember, recall, search, rollback. Bu bellek protokollerini uygulayın: **Bir oturum başlattığınızda:**
1. Bağlamı geri çağırın: recall(query="ecommerce-api", agent="Backend Architect")
2. Son oturumdan kalan bekleyen öğeleri gözden geçirin **İşi tamamladığınızda:**
1. Teslim edilebilirleri etiketlerle kaydedin: - remember(content="UUID birincil anahtarlı kullanıcı tablosu, bcrypt parola hash'leme, yenileme belirteçleriyle JWT kimlik doğrulaması oluşturuldu", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Alınan kararları ve bekleyen öğeleri dahil edin **Başka bir ajana devrettiğinizde:**
1. Alıcı ajan için bağlam bırakın: - remember(content="API uç noktaları: /auth/login, /auth/register, /products, /orders. Kimlik doğrulama akışı: JWT erişim belirteci (15dk) + yenileme belirteci (7 gün). Bilinen sorun: hız sınırlaması henüz uygulanmadı", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer") **Bir şeyler başarısız olduğunda:**
1. Son bilinen iyi durumu arayın
2. Geri yüklemek için rollback kullanın
Yapay zeka bellek araçlarına erişiminiz var: remember, recall, search, rollback. Bu bellek protokollerini uygulayın: **Bir oturum başlattığınızda:**
1. Bağlamı geri çağırın: recall(query="ecommerce-api", agent="Backend Architect")
2. Son oturumdan kalan bekleyen öğeleri gözden geçirin **İşi tamamladığınızda:**
1. Teslim edilebilirleri etiketlerle kaydedin: - remember(content="UUID birincil anahtarlı kullanıcı tablosu, bcrypt parola hash'leme, yenileme belirteçleriyle JWT kimlik doğrulaması oluşturuldu", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Alınan kararları ve bekleyen öğeleri dahil edin **Başka bir ajana devrettiğinizde:**
1. Alıcı ajan için bağlam bırakın: - remember(content="API uç noktaları: /auth/login, /auth/register, /products, /orders. Kimlik doğrulama akışı: JWT erişim belirteci (15dk) + yenileme belirteci (7 gün). Bilinen sorun: hız sınırlaması henüz uygulanmadı", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer") **Bir şeyler başarısız olduğunda:**
1. Son bilinen iyi durumu arayın
2. Geri yüklemek için rollback kullanın
Yapay zeka bellek araçlarına erişiminiz var: remember, recall, search, rollback. Bu bellek protokollerini uygulayın: **Bir oturum başlattığınızda:**
1. Bağlamı geri çağırın: recall(query="ecommerce-api", agent="Backend Architect")
2. Son oturumdan kalan bekleyen öğeleri gözden geçirin **İşi tamamladığınızda:**
1. Teslim edilebilirleri etiketlerle kaydedin: - remember(content="UUID birincil anahtarlı kullanıcı tablosu, bcrypt parola hash'leme, yenileme belirteçleriyle JWT kimlik doğrulaması oluşturuldu", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Alınan kararları ve bekleyen öğeleri dahil edin **Başka bir ajana devrettiğinizde:**
1. Alıcı ajan için bağlam bırakın: - remember(content="API uç noktaları: /auth/login, /auth/register, /products, /orders. Kimlik doğrulama akışı: JWT erişim belirteci (15dk) + yenileme belirteci (7 gün). Bilinen sorun: hız sınırlaması henüz uygulanmadı", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer") **Bir şeyler başarısız olduğunda:**
1. Son bilinen iyi durumu arayın
2. Geri yüklemek için rollback kullanın
You: "Backend Architect modunu etkinleştir. E-ticaret API'mız için kullanıcı sistemini tasarla." [Agent sistemi tasarlar, şema oluşturur, kimlik doğrulamayı uygular] Agent: "Kullanıcı sistemi tamamlandı. Bellek depolanıyor..."
→ Çağırır: remember("UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu", tags: ["ecommerce-api", "auth", "database"]) [Oturum sona erer] [Ertesi gün] You: "Dünden devam et" Agent: "Bağlam geri çağrılıyor..."
→ Çağırır: recall(query="ecommerce-api")
→ Döndürür: "UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu" Agent: "Dün UUID birincil anahtarlı kullanıcı tablosunu tasarladım, bcrypt parola hash'lemeyi uyguladım ve yenileme belirteçleriyle JWT kimlik doğrulamasını kurdum. Sonraki adım: ürün kataloğu şeması. Devam etmeye hazır."
You: "Backend Architect modunu etkinleştir. E-ticaret API'mız için kullanıcı sistemini tasarla." [Agent sistemi tasarlar, şema oluşturur, kimlik doğrulamayı uygular] Agent: "Kullanıcı sistemi tamamlandı. Bellek depolanıyor..."
→ Çağırır: remember("UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu", tags: ["ecommerce-api", "auth", "database"]) [Oturum sona erer] [Ertesi gün] You: "Dünden devam et" Agent: "Bağlam geri çağrılıyor..."
→ Çağırır: recall(query="ecommerce-api")
→ Döndürür: "UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu" Agent: "Dün UUID birincil anahtarlı kullanıcı tablosunu tasarladım, bcrypt parola hash'lemeyi uyguladım ve yenileme belirteçleriyle JWT kimlik doğrulamasını kurdum. Sonraki adım: ürün kataloğu şeması. Devam etmeye hazır."
You: "Backend Architect modunu etkinleştir. E-ticaret API'mız için kullanıcı sistemini tasarla." [Agent sistemi tasarlar, şema oluşturur, kimlik doğrulamayı uygular] Agent: "Kullanıcı sistemi tamamlandı. Bellek depolanıyor..."
→ Çağırır: remember("UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu", tags: ["ecommerce-api", "auth", "database"]) [Oturum sona erer] [Ertesi gün] You: "Dünden devam et" Agent: "Bağlam geri çağrılıyor..."
→ Çağırır: recall(query="ecommerce-api")
→ Döndürür: "UUID, bcrypt, JWT + yenileme belirteçleriyle kullanıcı tablosu" Agent: "Dün UUID birincil anahtarlı kullanıcı tablosunu tasarladım, bcrypt parola hash'lemeyi uyguladım ve yenileme belirteçleriyle JWT kimlik doğrulamasını kurdum. Sonraki adım: ürün kataloğu şeması. Devam etmeye hazır."
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"], "env": { "HOME": "/Users/your-username" } } }
}
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"], "env": { "HOME": "/Users/your-username" } } }
}
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"], "env": { "HOME": "/Users/your-username" } } }
}
remember aracı ile "E-ticaret projesi için test belleği" kaydedin
Tags: ["test", "ecommerce-api"] recall aracı ile "test" etiketli anıları sorgulayın
remember aracı ile "E-ticaret projesi için test belleği" kaydedin
Tags: ["test", "ecommerce-api"] recall aracı ile "test" etiketli anıları sorgulayın
remember aracı ile "E-ticaret projesi için test belleği" kaydedin
Tags: ["test", "ecommerce-api"] recall aracı ile "test" etiketli anıları sorgulayın
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"] } }
}
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"] } }
}
{ "mcpServers": { "memory": { "command": "node", "args": ["/absolute/path/to/memory-server.js"] } }
}
@memory remember "PostgreSQL ile e-ticaret API projesi başlatılıyor"
Tags: ["ecommerce-api", "setup"] @memory recall query="ecommerce"
@memory remember "PostgreSQL ile e-ticaret API projesi başlatılıyor"
Tags: ["ecommerce-api", "setup"] @memory recall query="ecommerce"
@memory remember "PostgreSQL ile e-ticaret API projesi başlatılıyor"
Tags: ["ecommerce-api", "setup"] @memory recall query="ecommerce"
remember({ content: "PostgreSQL'i MySQL yerine seçme nedenleri: (1) Esnek ürün nitelikleri için JSONB desteği, (2) daha iyi tam metin arama, (3) yerel UUID desteği", tags: ["ecommerce-api", "database", "decision"], agent: "Backend Architect"
})
remember({ content: "PostgreSQL'i MySQL yerine seçme nedenleri: (1) Esnek ürün nitelikleri için JSONB desteği, (2) daha iyi tam metin arama, (3) yerel UUID desteği", tags: ["ecommerce-api", "database", "decision"], agent: "Backend Architect"
})
remember({ content: "PostgreSQL'i MySQL yerine seçme nedenleri: (1) Esnek ürün nitelikleri için JSONB desteği, (2) daha iyi tam metin arama, (3) yerel UUID desteği", tags: ["ecommerce-api", "database", "decision"], agent: "Backend Architect"
})
recall(query="PostgreSQL MySQL karar")
recall(query="PostgreSQL MySQL karar")
recall(query="PostgreSQL MySQL karar")
remember({ content: "Backend tamamlandı. Uç noktalar: POST /auth/login, POST /auth/register, GET /products, POST /orders. Kimlik doğrulama: JWT 15dk erişim + 7 gün yenileme. Bekleyenler: hız sınırlaması, e-posta doğrulama. Frontend ihtiyaçları: giriş formu, ürün listesi, sepet, ödeme.", tags: ["ecommerce-api", "handoff", "backend-complete"], agent: "Backend Architect", for: "Frontend Developer"
})
remember({ content: "Backend tamamlandı. Uç noktalar: POST /auth/login, POST /auth/register, GET /products, POST /orders. Kimlik doğrulama: JWT 15dk erişim + 7 gün yenileme. Bekleyenler: hız sınırlaması, e-posta doğrulama. Frontend ihtiyaçları: giriş formu, ürün listesi, sepet, ödeme.", tags: ["ecommerce-api", "handoff", "backend-complete"], agent: "Backend Architect", for: "Frontend Developer"
})
remember({ content: "Backend tamamlandı. Uç noktalar: POST /auth/login, POST /auth/register, GET /products, POST /orders. Kimlik doğrulama: JWT 15dk erişim + 7 gün yenileme. Bekleyenler: hız sınırlaması, e-posta doğrulama. Frontend ihtiyaçları: giriş formu, ürün listesi, sepet, ödeme.", tags: ["ecommerce-api", "handoff", "backend-complete"], agent: "Backend Architect", for: "Frontend Developer"
})
recall(query="handoff", agent="Backend Architect")
recall(query="handoff", agent="Backend Architect")
recall(query="handoff", agent="Backend Architect")
remember({ content: "Oturum tamamlandı. Yapılanlar: kullanıcı tablosu, kimlik doğrulama uç noktaları, ürün şeması. Sonraki oturum: sipariş sistemi, ödeme web kancası. Engelleyiciler: Stripe API anahtarları bekleniyor.", tags: ["ecommerce-api", "checkpoint", "session-1"], agent: "Backend Architect"
})
remember({ content: "Oturum tamamlandı. Yapılanlar: kullanıcı tablosu, kimlik doğrulama uç noktaları, ürün şeması. Sonraki oturum: sipariş sistemi, ödeme web kancası. Engelleyiciler: Stripe API anahtarları bekleniyor.", tags: ["ecommerce-api", "checkpoint", "session-1"], agent: "Backend Architect"
})
remember({ content: "Oturum tamamlandı. Yapılanlar: kullanıcı tablosu, kimlik doğrulama uç noktaları, ürün şeması. Sonraki oturum: sipariş sistemi, ödeme web kancası. Engelleyiciler: Stripe API anahtarları bekleniyor.", tags: ["ecommerce-api", "checkpoint", "session-1"], agent: "Backend Architect"
})
recall(query="checkpoint session-1")
recall(query="checkpoint session-1")
recall(query="checkpoint session-1")
remember({ content: "HATA: Çıkış yaptıktan sonra yenileme belirteci sona ermiyor. Belirteç bellekte depolanıyor, kalıcı değil. Düzeltme: Redis'e TTL ile taşı.", tags: ["ecommerce-api", "bug", "auth"], agent: "Code Reviewer", severity: "high"
})
remember({ content: "HATA: Çıkış yaptıktan sonra yenileme belirteci sona ermiyor. Belirteç bellekte depolanıyor, kalıcı değil. Düzeltme: Redis'e TTL ile taşı.", tags: ["ecommerce-api", "bug", "auth"], agent: "Code Reviewer", severity: "high"
})
remember({ content: "HATA: Çıkış yaptıktan sonra yenileme belirteci sona ermiyor. Belirteç bellekte depolanıyor, kalıcı değil. Düzeltme: Redis'e TTL ile taşı.", tags: ["ecommerce-api", "bug", "auth"], agent: "Code Reviewer", severity: "high"
})
search(tags=["bug", "ecommerce-api"])
search(tags=["bug", "ecommerce-api"])
search(tags=["bug", "ecommerce-api"])
import crypto from 'crypto'; const ENCRYPTION_KEY = process.env.MEMORY_ENCRYPTION_KEY;
const ALGORITHM = 'aes-256-gcm'; function encrypt(text) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(ENCRYPTION_KEY), iv); const encrypted = cipher.update(text, 'utf8', 'hex'); return { encryptedData: encrypted + cipher.final('hex'), iv: iv.toString('hex'), authTag: cipher.getAuthTag().toString('hex') };
} function decrypt(encrypted) { const decipher = crypto.createDecipheriv( ALGORITHM, Buffer.from(ENCRYPTION_KEY), Buffer.from(encrypted.iv, 'hex') ); decipher.setAuthTag(Buffer.from(encrypted.authTag, 'hex')); return decipher.update(encrypted.encryptedData, 'hex', 'utf8') + decipher.final('utf8');
}
import crypto from 'crypto'; const ENCRYPTION_KEY = process.env.MEMORY_ENCRYPTION_KEY;
const ALGORITHM = 'aes-256-gcm'; function encrypt(text) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(ENCRYPTION_KEY), iv); const encrypted = cipher.update(text, 'utf8', 'hex'); return { encryptedData: encrypted + cipher.final('hex'), iv: iv.toString('hex'), authTag: cipher.getAuthTag().toString('hex') };
} function decrypt(encrypted) { const decipher = crypto.createDecipheriv( ALGORITHM, Buffer.from(ENCRYPTION_KEY), Buffer.from(encrypted.iv, 'hex') ); decipher.setAuthTag(Buffer.from(encrypted.authTag, 'hex')); return decipher.update(encrypted.encryptedData, 'hex', 'utf8') + decipher.final('utf8');
}
import crypto from 'crypto'; const ENCRYPTION_KEY = process.env.MEMORY_ENCRYPTION_KEY;
const ALGORITHM = 'aes-256-gcm'; function encrypt(text) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(ENCRYPTION_KEY), iv); const encrypted = cipher.update(text, 'utf8', 'hex'); return { encryptedData: encrypted + cipher.final('hex'), iv: iv.toString('hex'), authTag: cipher.getAuthTag().toString('hex') };
} function decrypt(encrypted) { const decipher = crypto.createDecipheriv( ALGORITHM, Buffer.from(ENCRYPTION_KEY), Buffer.from(encrypted.iv, 'hex') ); decipher.setAuthTag(Buffer.from(encrypted.authTag, 'hex')); return decipher.update(encrypted.encryptedData, 'hex', 'utf8') + decipher.final('utf8');
} - Bellek dosyası yolunu kontrol edin (~/.mcp-memory/memories.json)
- MCP sunucusunun çalıştığından emin olun
- Claude Code/Cursor'ın MCP yapılandırmasını doğrulayın - Daha spesifik etiketler ekleyin
- Ajan adına göre filtreleyin
- Tırnak içinde tam ifadeler kullanın - Eski anıları periyodik olarak arşivleyin
- Tamamlanan projeleri temizlemek için rollback kullanın
- Bellek verinize son kullanma tarihi ekleyin - Gömme ile anlamsal arama ekleyin
- Bellek sona erme (30 gün sonra otomatik arşivleme) uygulayın
- Bellek özetleme (uzun oturumları yoğunlaştırma) ekleyin - Merkezî bir bellek sunucusu paylaşın
- Anıları projeye ve geliştiriciye göre etiketleyin
- Yeni ekip üyeleri için işe alım akışları oluşturun - Git commit'lerini otomatik anı olarak kaydedin
- Proje yönetimi araçları (Jira, Linear) ile senkronize edin
- Anıları dökümana aktarın - Claude Code'u başlatmadan önce MCP sunucusunun çalıştığını kontrol edin
- Bellek dosyası yolunun mevcut olduğunu doğrulayın: ls -la ~/.mcp-memory/memories.json
- Dosya izinlerinin okuma/yazmaya izin verdiğinden emin olun: chmod 644 ~/.mcp-memory/memories.json
- ~/.claude/settings.json içindeki sunucu yolunun doğru olduğundan emin olun - Sorgunun depolanan etiketlerle eşleştiğini kontrol edin (büyük/küçük harf duyarlı)
- Daha genel aramalar veya belirli etiketlerle search deneyin
- Anıların kaydedildiğini doğrulayın: cat ~/.mcp-memory/memories.json
- agent filtresi aktifse doğru ajan adını kullandığınızdan emin olun - 30 günden eski anılar için otomatik arşivleme uygulayın
- Tarih aralığına göre silme yapan bir prune aracı ekleyin
- Anıları projeye veya tarihe göre ayrı dosyalara bölün
- Büyük ölçekli kullanımda JSON yerine SQLite gibi bir veritabanı arka ucu kullanın - Node.js sürümünü kontrol edin: node --version (18+ olmalı)
- Eksik bağımlılıkları yükleyin: npm install @modelcontextprotocol/sdk zod
- Sunucu kodunda sözdizimi hatalarını kontrol edin
- Hataları görmek için doğrudan çalıştırın: node memory-server.js - remember çağrılarında mutlaka agent alanını doldurun
- Proje başına benzersiz etiketler kullanın: ["project-x", "backend", "auth"]
- Geri çağırırken ajan adına göre filtreleyin
- Gerekirse proje başına ayrı bellek dosyaları kullanın - Bellek aracı çağrılarında API anahtarı isteyin
- Kullanıcıya özel namespace kullanın
- Tüm bellek işlemlerini denetim amaçlı kaydedin
- Kullanıcı başına hız limiti ekleyin