Kurz gesagt
Füge KI-Agenten in 4 Schritten persistenten Speicher hinzu: (1) Richte einen MCP-Speicherserver mit den Tools remember, recall, search und rollback ein, (2) Füge Speicheranweisungen zu Agenten-Prompts hinzu, (3) Konfiguriere ~/.claude/settings.json für Claude Code oder .cursor/mcp.json für Cursor, (4) Verwende Speichermuster für Entscheidungsprotokollierung, Agentenübergaben und Sitzungs-Checkpoints. Agenten behalten den Kontext über mehrere Sitzungen hinweg – kein lästiges Kopieren und Einfügen früherer Konversationen mehr.
Löse das Problem „Ich erinnere mich nicht an gestern“. Füge KI-Agenten persistenten Speicher hinzu, der das MCP-Protokoll verwendet, und sie werden Entscheidungen, Ergebnisse und Kontext aus früheren Sitzungen abrufen können.
Du kennst das Spielchen:
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?"
Du kopierst und fügst die vorherige Konversation ein. Der Agent liest 2000 Zeilen Kontext. Ihr beide verliert 15 Minuten, um wieder auf dem neuesten Stand zu sein.
Persistenter Speicher behebt dies. Mit MCP (Model Context Protocol)-Speicher speichern Agenten Entscheidungen automatisch und rufen sie bei Bedarf ab. Kein Kopieren und Einfügen. Keine erneuten Erklärungen.
In diesem Tutorial richtest du MCP-Speicher für KI-Agenten ein. Du lernst, wie du Entscheidungen aus Backend-Architekt-Sitzungen speicherst, Kontext abrufst, wenn du zu einem Datenbank-Optimierer wechselst, und Ergebnisse an einen Frontend-Entwickler übergibst – alles ohne Kontextverlust. Dieselben Speichermuster funktionieren, egal ob du APIs mit Apidog-Integration erstellst oder mehrtägige Entwicklungs-Sprints verwaltest.
Was ist MCP-Speicher?
MCP-Speicher ermöglicht es KI-Agenten, Informationen sitzungsübergreifend zu speichern und abzurufen. Stell dir das wie ein gemeinsames Notizbuch vor, in das Agenten schreiben und aus dem sie lesen können.
Vier Tools treiben den MCP-Speicher an:
| Tool | Zweck | Beispiel |
|---|---|---|
remember |
Informationen mit Tags speichern | Speichere „users table with UUID, bcrypt“ |
recall |
Nach Schlüsselwort oder Tag suchen | Finde „auth decisions“ |
rollback |
Auf vorherigen Zustand wiederherstellen | Mache schlechte Schemaänderungen rückgängig |
search |
Sitzungsübergreifend suchen | „Was hat der Backend-Architekt entschieden?“ |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ AI Agent │ │ MCP Memory │ │ Storage │
│ (Claude Code) │◄───────►│ Server │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
Schritt 1: Einrichten eines MCP-Speicherservers
Du benötigst einen MCP-Server, der Speicher-Tools bereitstellt. Es gibt mehrere Open-Source-Implementierungen.
Option A: Einen gehosteten Speicherserver verwenden
npm install -g @example/mcp-memory-server
Option B: Einen einfachen lokalen Server ausführen
Erstelle memory-server.js:
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 => {
const matchesQuery = m.content.toLowerCase().includes(query.toLowerCase()) ||
m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()));
const matchesAgent = !agent || m.agent === agent;
return matchesQuery && matchesAgent;
});
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);
Server starten:
node memory-server.js
Schritt 2: Speicheranweisungen zu jedem Agenten hinzufügen
Du musst keine Agentendateien ändern. Füge Speicheranweisungen in deinem Prompt hinzu:
Du hast Zugriff auf MCP-Speicher-Tools: remember, recall, search, rollback.
Befolge diese Speicherprotokolle:
**Wenn du eine Sitzung startest:**
1. Kontext abrufen: recall(query="ecommerce-api", agent="Backend Architect")
2. Überprüfe ausstehende Aufgaben aus der letzten Sitzung
**Wenn du die Arbeit abgeschlossen hast:**
1. Ergebnisse mit Tags speichern:
- remember(content="Created users table with UUID primary key, bcrypt password hashing, JWT auth with refresh tokens", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Füge getroffene Entscheidungen und ausstehende Aufgaben hinzu
**Bei der Übergabe an einen anderen Agenten:**
1. Hinterlasse Kontext für den empfangenden Agenten:
- remember(content="API endpoints: /auth/login, /auth/register, /products, /orders. Auth flow: JWT access token (15min) + refresh token (7 days). Known issue: rate limiting not yet implemented", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer")
**Wenn etwas fehlschlägt:**
1. Suche nach dem letzten bekannten guten Zustand
2. Verwende rollback zum Wiederherstellen
Beispiel in Aktion:
Du: „Aktiviere den Backend-Architekten-Modus. Entwerfe das Benutzersystem für unsere E-Commerce-API.“
[Agent baut JWT-Authentifizierung, erstellt Benutzertabelle, implementiert Refresh-Tokens]
Agent: „Benutzersystem abgeschlossen. Speichere Informationen...“
→ Ruft auf: remember("users table with UUID, bcrypt, JWT + refresh tokens", tags: ["ecommerce-api", "auth", "database"])
[Sitzung endet]
[Nächster Tag]
Du: „Fahre von gestern fort“
Agent: „Rufe Kontext ab...“
→ Ruft auf: recall(query="ecommerce-api")
→ Gibt zurück: "users table with UUID, bcrypt, JWT + refresh tokens"
Agent: „Gestern habe ich die Benutzertabelle mit UUID-Primärschlüsseln entworfen, bcrypt-Passwort-Hashing implementiert und die JWT-Authentifizierung mit Refresh-Tokens eingerichtet. Nächster Schritt: Produktkatalogschema. Bereit zum Fortfahren.“
Schritt 3: Für Claude Code konfigurieren
Füge den Speicherserver deiner MCP-Konfiguration hinzu:
Bearbeite ~/.claude/settings.json:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"],
"env": {
"HOME": "/Users/your-username"
}
}
}
}
Starte Claude Code neu. Die Speicher-Tools sollten nun verfügbar sein.
Teste es:
Verwende das remember-Tool, um zu speichern: "Test-Speicher für E-Commerce-Projekt"
Tags: ["test", "ecommerce-api"]
Verwende das recall-Tool, um Erinnerungen über "test" zu finden
Schritt 4: Für Cursor konfigurieren
Erstelle .cursor/mcp.json in deinem Projekt:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"]
}
}
}
Teste es:
@memory remember "Starte E-Commerce-API-Projekt mit PostgreSQL"
Tags: ["ecommerce-api", "setup"]
@memory recall query="ecommerce"
Speichermuster für reale Workflows
Muster 1: Entscheidungsprotokollierung
Jedes Mal, wenn du eine technische Entscheidung triffst, protokolliere sie:
remember({
content: "PostgreSQL gegenüber MySQL gewählt für: (1) JSONB-Unterstützung für flexible Produktattribute, (2) bessere Volltextsuche, (3) native UUID-Unterstützung",
tags: ["ecommerce-api", "database", "decision"],
agent: "Backend Architect"
})
Später, wenn jemand fragt „Warum PostgreSQL?“:
recall(query="PostgreSQL MySQL decision")
Muster 2: Agentenübergaben
Beim Wechsel des Agenten hinterlasse eine Übergabenotiz:
remember({
content: "Backend abgeschlossen. Endpunkte: POST /auth/login, POST /auth/register, GET /products, POST /orders. Auth: JWT 15min Zugriff + 7 Tage Refresh. Ausstehend: Ratenbegrenzung, E-Mail-Verifizierung. Frontend benötigt: Anmeldeformular, Produktliste, Warenkorb, Kasse.",
tags: ["ecommerce-api", "handoff", "backend-complete"],
agent: "Backend Architect",
for: "Frontend Developer"
})
Der Frontend-Entwickler beginnt mit:
recall(query="handoff", agent="Backend Architect")
Muster 3: Sitzungs-Checkpoints
Am Ende jeder Arbeitssitzung:
remember({
content: "Sitzung abgeschlossen. Erledigt: Benutzertabelle, Authentifizierungs-Endpunkte, Produktschema. Nächste Sitzung: Bestellsystem, Zahlungs-Webhook. Blocker: Warte auf Stripe API-Schlüssel.",
tags: ["ecommerce-api", "checkpoint", "session-1"],
agent: "Backend Architect"
})
Nächste Sitzung fortsetzen:
recall(query="checkpoint session-1")
Muster 4: Fehlerverfolgung
Wenn du einen Fehler findest:
remember({
content: "BUG: Refresh-Token läuft nach Abmeldung nicht ab. Token im Speicher, nicht persistent. Behebung: Umzug nach Redis mit TTL.",
tags: ["ecommerce-api", "bug", "auth"],
agent: "Code Reviewer",
severity: "high"
})
Später nach Fehlern suchen:
search(tags=["bug", "ecommerce-api"])
Fehlerbehebung
Speicher nicht persistent:
- Überprüfe den Speicherdateipfad (
~/.mcp-memory/memories.json) - Stelle sicher, dass der MCP-Server läuft
- Verifiziere, dass Claude Code/Cursor die MCP-Konfiguration hat
Zu viele Ergebnisse beim Abruf:
- Füge spezifischere Tags hinzu
- Nach Agentennamen filtern
- Verwende exakte Phrasen in Anführungszeichen
Speicherdatei wird zu groß:
- Archiviere regelmäßig alte Erinnerungen
- Verwende
rollback, um abgeschlossene Projekte zu bereinigen - Füge deinem Speicherschema Ablaufdaten hinzu
Was du erstellt hast
| Komponente | Zweck |
|---|---|
| MCP-Speicherserver | Speichert/ruft Informationen sitzungsübergreifend ab |
remember-Tool |
Protokolliert Entscheidungen, Ergebnisse, Übergaben |
recall-Tool |
Findet Kontext aus früheren Sitzungen |
search-Tool |
Abfrage nach Tags über alle Erinnerungen hinweg |
rollback-Tool |
Stellt bei Bedarf den vorherigen Zustand wieder her |
| Speichermuster | Entscheidungsprotokollierung, Übergaben, Checkpoints, Fehlerverfolgung |
Nächste Schritte
Erweitere den Speicherserver:
- Füge semantische Suche mit Embeddings hinzu
- Implementiere Speicherablauf (automatische Archivierung nach 30 Tagen)
- Füge Speichersummierung hinzu (lange Sitzungen zusammenfassen)
Baue Teamspeicher auf:
- Teile einen zentralen Speicherserver innerhalb deines Teams
- Tagge Erinnerungen nach Projekt und Entwickler
- Erstelle Onboarding-Prozesse für neue Teammitglieder
Integration mit Tools:
- Git-Commits automatisch als Erinnerungen protokollieren
- Synchronisiere mit Projektmanagement (Jira, Linear)
- Erinnerungen in die Dokumentation exportieren
Fehlerbehebung häufiger Probleme
Speicher nicht persistent zwischen Sitzungen:
- Überprüfe, ob der MCP-Server läuft, bevor du Claude Code startest
- Verifiziere, dass der Speicherdateipfad existiert:
ls -la ~/.mcp-memory/memories.json - Stelle sicher, dass Dateiberechtigungen Lese-/Schreibzugriff erlauben:
chmod 644 ~/.mcp-memory/memories.json - Bestätige, dass die Serverkonfiguration in
~/.claude/settings.jsonauf den korrekten Pfad zeigt
Abruf liefert leere Ergebnisse:
- Überprüfe, ob die Abfrage mit den gespeicherten Tags übereinstimmt (Groß-/Kleinschreibung)
- Probiere breitere Suchbegriffe oder verwende
searchmit spezifischen Tags - Überprüfe, ob Erinnerungen tatsächlich gespeichert wurden:
cat ~/.mcp-memory/memories.json - Stelle sicher, dass der Agenten-Namensfilter übereinstimmt (falls der
agent-Parameter verwendet wird)
Speicherdatei wird zu groß:
- Implementiere automatische Archivierung für Erinnerungen, die älter als 30 Tage sind
- Füge ein
prune-Tool hinzu, das Erinnerungen nach Datumsbereich löscht - Teile Erinnerungen in separate Dateien nach Projekt oder Datum auf
- Verwende ein Datenbank-Backend (SQLite) anstelle von JSON für den groß angelegten Einsatz
Server startet nicht:
- Überprüfe Node.js-Version:
node --version(sollte 18+) - Installiere fehlende Abhängigkeiten:
npm install @modelcontextprotocol/sdk zod - Suche nach Syntaxfehlern im Servercode
- Direkt ausführen, um Fehler zu sehen:
node memory-server.js
Mehrere Agenten überschreiben sich gegenseitig die Erinnerungen:
- Füge immer das
agent-Feld hinzu, wennrememberaufgerufen wird - Verwende eindeutige Tags pro Projekt:
["project-x", "backend", "auth"] - Filtere den Abruf nach Agentennamen, wenn Kontext abgerufen wird
- Erwäge separate Speicherdateien pro Projekt
Sicherheitsaspekte des Speicherservers
Speicherung von API-Schlüsseln:Wenn dein Speicherserver sensible Daten (API-Schlüssel, Passwörter) speichert, implementiere Verschlüsselung:
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');
}
Zugriffssteuerung:Für Team-Speicherserver füge Authentifizierung hinzu:
- API-Schlüssel bei Speicher-Tool-Aufrufen erforderlich
- Implementiere benutzerspezifische Speicher-Namespaces
- Protokolliere alle Speichervorgänge für Audit-Trails
- Ratenbegrenzung der Anfragen pro Benutzer
Deine KI-Agenten haben jetzt einen persistenten Speicher. Sie erinnern sich an gestern. Sie rufen Entscheidungen ab. Sie übergeben Kontext ohne Kopieren und Einfügen.
Nie wieder „Ich habe keinen Kontext aus früheren Sitzungen.“ Nie wieder erneute Erklärungen. Nie wieder verschwendete Zeit.
Das ist die Stärke des MCP-Speichers: Gib deinen Agenten ein gemeinsames Notizbuch und beobachte, wie sie über mehrtägige Projekte hinweg tatsächlich nützlich werden.
FAQ
Was ist MCP-Speicher?MCP-Speicher ist eine Protokollimplementierung, die es KI-Agenten ermöglicht, Informationen sitzungsübergreifend zu speichern und abzurufen. Stell dir das wie ein gemeinsames Notizbuch vor, in das Agenten schreiben und aus dem sie lesen können, wodurch der Kontext über einzelne Konversationen hinaus erhalten bleibt.
Wie richte ich persistenten Speicher für Claude Code ein?Installiere einen MCP-Speicherserver und füge ihn dann zu ~/.claude/settings.json mit dem Serverbefehl und -pfad hinzu. Starte Claude Code neu und die Speicher-Tools (remember, recall, search, rollback) werden verfügbar.
Welche KI-Agenten unterstützen MCP-Speicher?Jeder Agent, der auf MCP-kompatiblen Clients (Claude Code, Cursor, Windsurf) läuft, kann Speicher-Tools verwenden. Du musst keine Agentendateien ändern – füge einfach Speicheranweisungen zu deinen Prompts hinzu.
Was sind die besten Speichermuster für Agentenübergaben?Verwende remember mit Tags wie ["handoff", "project-name"], um Kontext für den nächsten Agenten zu hinterlassen. Füge abgeschlossene Arbeiten, ausstehende Aufgaben und bekannte Probleme hinzu. Der empfangende Agent ruft recall(query="handoff") auf, um diese abzurufen.
Wie viel Speicher können MCP-Server speichern?Hängt von der Implementierung ab. Der Referenzserver verwendet eine JSON-Datei, die unbegrenzt wächst. Produktionsserver sollten Ablaufrichtlinien, automatische Archivierung oder Datenbank-Backends für den groß angelegten Einsatz hinzufügen.
Können Teams einen zentralen Speicherserver teilen?Ja. Betreibe den Speicherserver auf einer gemeinsam genutzten Maschine oder Cloud-Instanz, konfiguriere die Clients aller Teammitglieder so, dass sie sich damit verbinden, und tagge Erinnerungen nach Projekt und Entwickler für einen organisierten Abruf.
Was, wenn der Speicherabruf zu viele Ergebnisse liefert?Füge spezifischere Tags hinzu, wenn du Erinnerungen speicherst. Filtere in deinen Abruf-Anfragen nach Agentennamen. Verwende exakte Phrasen in Anführungszeichen. Erwäge die Implementierung einer semantischen Suche mit Embeddings für einen intelligenteren Abruf.
