In diesem Beitrag
mcp-memory-service: Gemeinsames Gedächtnis für Claude Code und Cursor
mcp-memory-service gibt KI-Coding-Agenten einen gemeinsamen, dauerhaften Speicher für Architekturentscheidungen, Fehleranalysen und Projektkonventionen. Der Nutzen besteht nicht darin, ein unbegrenztes Gespräch im Modell zu behalten. Eine neue Sitzung kann relevante Einträge aus einer anderen Sitzung oder einem anderen Tool abrufen, sofern beide Clients denselben Speicher erreichen und die Memory-Werkzeuge tatsächlich verwenden. Das offizielle Repository beschreibt lokale Embeddings, semantische Suche und typisierte Beziehungen in einem Wissensgraphen.
Quellenprüfung: . Dieser Leitfaden basiert auf Dokumentation. Er ist weder ein Bericht über eine praktisch durchgeführte Integration noch ein unabhängig reproduzierter Benchmark. Dokumentierte Funktionen, unsere Konfigurationsbeispiele und vorgeschlagene Abnahmetests werden entsprechend getrennt.
Ersetzt das CLAUDE.md, Cursor-Regeln oder das eingebaute Gedächtnis?
Nein. Stabile Anweisungen gehören ins Repository, veränderliche und belegte Projekthistorie in den gemeinsamen Speicher. Die Behauptung, Claude Code beginne jede Sitzung völlig ohne dauerhaften Kontext, greift zu kurz: Die Memory-Dokumentation von Claude Code beschreibt Anweisungsdateien und Auto Memory. Auch Cursor-Regeln bewahren Anweisungen. Daraus folgt jedoch nicht, dass verschiedene Tools eine gemeinsame, durchsuchbare Entscheidungshistorie nutzen.
| Information | Geeigneter Ort | Begründung |
|---|---|---|
| Build-Befehle, Verzeichnisregeln und verpflichtende Prüfungen | Versionierte Anweisungen, etwa CLAUDE.md, AGENTS.md oder Cursor-Regeln | Prüfbare Vorgaben sollen mit dem Code versioniert werden. |
| Warum ein Ansatz verworfen wurde oder welche Migration einen Fehler auslöste | Abgegrenzter gemeinsamer Speicher mit Verweisen auf Entscheidungen, Commits und Tests | Historische Begründungen sollen über Sitzungen hinweg auffindbar bleiben. |
| Wie die Anwendung aktuell tatsächlich funktioniert | Aktueller Code, Konfiguration und ausführbare Tests | Eine gespeicherte Aussage kann inzwischen überholt sein. |
Die entscheidende Einstiegsfrage lautet deshalb: Rekonstruiert das Team beim Wechsel zwischen Claude Code, Cursor und OpenCode immer wieder dieselben Begründungen? Beginnen Sie mit diesem Problem, statt ein zweites, widersprüchliches Regelwerk aufzubauen.
mcp-memory-service installieren: Installation ist noch keine Integration
Der einfache Installationsbefehl lautet:
pip install mcp-memory-serviceDer PyPI-Eintrag nennt Version 11.13.0 vom 19. September 2026, Python ab Version 3.10 und die Apache-2.0-Lizenz. Unser Beispiel fixiert diese geprüfte Version, statt spätere Veröffentlichungen automatisch zu übernehmen.
python3 -m venv "$HOME/.venvs/mcp-memory-service"
"$HOME/.venvs/mcp-memory-service/bin/python" -m pip install "mcp-memory-service==11.13.0"
mkdir -p "$HOME/.local/share/agent-memory/example-app"
"$HOME/.venvs/mcp-memory-service/bin/memory" server --helpDiese Shell-Befehle sind für macOS und Linux gedacht. Unter Windows müssen Sie insbesondere die ausführbare Datei der virtuellen Umgebung und die absoluten Speicherpfade anpassen. Übernehmen Sie POSIX-Pfade nicht unverändert. Nutzen Sie das im Team etablierte Verfahren zur Verwaltung von Python-Umgebungen.
Der offizielle Einrichtungsleitfaden dokumentiert memory server und die Verbindung zum Client. Die Installation eines Python-Pakets registriert nicht automatisch einen MCP-Server in jeder IDE, importiert keine alten Gespräche und sorgt nicht dafür, dass jede neue Sitzung Erinnerungen abruft.
Die entscheidende Einstellung: dieselbe Datenbank für alle Clients
Dasselbe Paket mit unterschiedlichen Datenbankpfaden bedeutet getrennte Erinnerungen. Im folgenden Beispiel für einen Benutzer auf einem Rechner verwenden alle drei Clients dieselbe ausführbare Datei und dieselbe absolute SQLite-Datei. Die Konfigurationsreferenz dokumentiert MCP_MEMORY_STORAGE_BACKEND, MCP_MEMORY_SQLITE_PATH und MCP_MEMORY_USE_ONNX.
Ersetzen Sie example-app überall einheitlich durch ein Projekt beziehungsweise einen klar abgegrenzten Vertrauensbereich. Trennen Sie die Repositories unterschiedlicher Kunden auch beim Speicher, statt Tags als Zugriffsschutz zu behandeln. Der Pfad verweist auf eine Datei, nicht nur auf deren Verzeichnis. Container, Remote-Entwicklungsrechner und andere Betriebssystemkonten teilen nicht automatisch Ihr Home-Verzeichnis, nur weil ihre Konfiguration ähnlich aussieht.
Jeder MCP-Client startet in diesem Beispiel einen stdio-Prozess für denselben lokalen Speicher. Das ist kein Konzept für einen Mehrbenutzerbetrieb. Prüfen Sie parallele Zugriffe vor der produktiven Nutzung. Legen Sie eine aktive SQLite-Datenbank weder in Git noch in einen synchronisierten Ordner, den Sie wie eine Datenbankreplikation behandeln.
Claude Code über lokales MCP verbinden
Führen Sie diesen Befehl im Projekt aus, für das die Verbindung verfügbar sein soll:
claude mcp add \
--env MCP_MEMORY_STORAGE_BACKEND=sqlite_vec \
--env MCP_MEMORY_SQLITE_PATH="$HOME/.local/share/agent-memory/example-app/sqlite_vec.db" \
--env MCP_MEMORY_USE_ONNX=true \
--transport stdio --scope local \
memory -- "$HOME/.venvs/mcp-memory-service/bin/memory" server
claude mcp listDas Beispiel folgt dem offiziellen MCP-Befehlsformat von Claude Code. Mit --scope local bleibt die Registrierung in Ihrer lokalen Projektkonfiguration. Die Optionen stehen vor dem Servernamen, die ausführbare Datei hinter dem Trenner --. Der explizite Programmpfad vermeidet die Annahme, dass eine IDE denselben PATH wie das Terminal erbt.
Starten oder verbinden Sie den Client anschließend neu und prüfen Sie den Verbindungsstatus sowie die Werkzeuge memory_store und memory_search. Geben Sie nur erwartete Aktionen frei. Ein verbundener Server beweist noch nicht, dass bereits ein Eintrag gespeichert wurde.
Cursor für denselben Memory-Speicher konfigurieren
Ergänzen Sie diesen Eintrag in der projektbezogenen Datei .cursor/mcp.json. Erhalten Sie dabei bereits konfigurierte Server:
{
"mcpServers": {
"memory": {
"type": "stdio",
"command": "${userHome}/.venvs/mcp-memory-service/bin/memory",
"args": [
"server"
],
"env": {
"MCP_MEMORY_STORAGE_BACKEND": "sqlite_vec",
"MCP_MEMORY_SQLITE_PATH": "${userHome}/.local/share/agent-memory/example-app/sqlite_vec.db",
"MCP_MEMORY_USE_ONNX": "true"
}
}
}
}Die MCP-Dokumentation von Cursor beschreibt die stdio-Felder und unterstützt die Ersetzung von ${userHome}. Prüfen Sie den aufgelösten Pfad, verbinden Sie den Server neu und lesen Sie bei fehlenden Werkzeugen die MCP-Ausgabe. Zugangsdaten und Datenbanken aus Kundenprojekten gehören nicht in eine eingecheckte Projektkonfiguration.
Dass beide Clients einen Server namens „memory“ anzeigen, beweist keine gemeinsame Datenhaltung. Der unten beschriebene Test prüft die tatsächliche Verbindung zwischen Datenbank und Werkzeugaufrufen.
OpenCode: MCP-Verbindung und Auto-Capture-Plugin unterscheiden
Für dieselbe lokale MCP-Anbindung ergänzen Sie opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"memory": {
"type": "local",
"command": [
"{env:HOME}/.venvs/mcp-memory-service/bin/memory",
"server"
],
"enabled": true,
"environment": {
"MCP_MEMORY_STORAGE_BACKEND": "sqlite_vec",
"MCP_MEMORY_SQLITE_PATH": "{env:HOME}/.local/share/agent-memory/example-app/sqlite_vec.db",
"MCP_MEMORY_USE_ONNX": "true"
}
}
}
}Die MCP-Referenz von OpenCode verwendet type: local, ein Befehlsarray und environment, nicht Cursors Feld env. Die Konfigurationsreferenz dokumentiert die Ersetzung von {env:HOME}. Unser Beispiel kombiniert diese dokumentierten Client-Einstellungen mit dem Serverbefehl des Projekts. Wir haben diese Drei-Client-Konfiguration nicht praktisch ausgeführt.
Das separate Memory-Awareness-Plugin nutzt dagegen die HTTP-REST-API für den Abruf beim Sitzungsstart und die automatische Erfassung. Seine Dateien stammen aus dem Repository und werden nicht allein durch pip installiert. MCP stellt Werkzeuge bereit; das Plugin ergänzt Automatisierung im Sitzungsablauf. Das sind unterschiedliche Integrationswege.
Beginnen Sie mit einem Weg. Beide ohne klare Erfassungsregeln parallel einzuführen, erschwert die Zuordnung von Einträgen. Das stdio-Beispiel benötigt keinen HTTP-Listener. Ein optionaler Plugin-Betrieb erfordert eine gesonderte Prüfung von Endpunkt, Authentifizierung und Netzwerkzugriff.
Prüfen, ob Erinnerungen Neustart und IDE-Wechsel überstehen
Prüfen Sie den tatsächlichen Abruf, nicht die Zusicherung des Agenten. Fordern Sie Claude Code ausdrücklich auf, mit memory_store eine fiktive Entscheidung mit dem Tag project:example-app zu speichern: „Zahlungsereignisse verwenden eine Outbox, damit nach einer bestätigten Zahlung das nachgelagerte Ereignis nicht verloren gehen kann.“ Ergänzen Sie eine fiktive Entscheidungsreferenz, Status und Datum. Verwenden Sie keine echten Kundendaten.
Kontrollieren Sie die erfolgreiche Rückmeldung des Speicherwerkzeugs. Schließen Sie die Sitzung. Fragen Sie in einer neuen Cursor-Sitzung mit einem ausdrücklichen Aufruf von memory_search nach dem Grund für die Zahlungs-Outbox. Vergleichen Sie Kennung und Inhalt des zurückgegebenen Eintrags. Eine plausible Antwort aus allgemeinem Modellwissen reicht nicht. Wiederholen Sie den Test in OpenCode und nach einem Neustart der Client-Prozesse.
Ergänzen Sie einen Negativtest: Ein anderes Projekt darf die Entscheidung unter dem gewählten Isolationskonzept nicht abrufen können. Ein Tag grenzt Suchergebnisse ein, ersetzt aber keine Sicherheitsgrenze. Prüfen Sie fehlende und unerwünschte Treffer, bevor Sie automatische Erfassung aktivieren.
Lokale ONNX-Embeddings: Was „keine externen API-Aufrufe“ wirklich bedeutet
Lokale Embedding-Berechnung macht nicht den gesamten Coding-Workflow offline. ONNX Runtime kann ein vorhandenes Modell lokal ausführen. Paketinstallation und erstmaliger Modelldownload sind davon getrennte Netzwerkvorgänge. Ein cloudbasiertes Coding-Modell kann gespeicherte Inhalte weiterhin erhalten, wenn der Client Werkzeugergebnisse in seinen Kontext übernimmt.
Für mehrsprachige Teams kommt eine weitere Grenze hinzu. Die Modellkarte von all-MiniLM-L6-v2 beschreibt das Standardmodell als englischsprachig, mit 384-dimensionalen Vektoren und standardmäßiger Kürzung nach 256 Word Pieces. Eine deutsche Oberfläche belegt keine zuverlässige Suche zwischen deutschen Fragen und englischen Einträgen. Bei langen Gesprächsexporten kann relevanter Inhalt schon vor der Vektorberechnung wegfallen.
Die Beispielkonfiguration der Umgebungsvariablen enthält Einstellungen für Modelle, Anbieter und optionale Funktionen. Prüfen Sie diese konkret. „Local-first“ beweist keine bestimmte Datengrenze. Cloud- oder Hybrid-Speicher, externe Qualitätsbewertung und LLM-gestützte Erfassung müssen gesondert entschieden werden.
Unser vorgeschlagener Sprachtest: Speichern Sie eine genehmigte Entscheidung auf Englisch und fragen Sie mit realistischen Entwicklerformulierungen auf Deutsch, Spanisch und Chinesisch danach. Messen Sie, ob der richtige Eintrag erscheint, nicht ob das Modell eine Antwort übersetzen kann. Ein Modellwechsel erfordert eine abgesicherte Migration mit erneuter Embedding-Berechnung, auch wenn die Vektordimension gleich bleibt.
Ruft mcp-memory-service Kontext wirklich in 5 ms ab?
5 ms sind eine Leistungsangabe des Projekts, keine in diesem Artikel nachgewiesene Ende-zu-Ende-Garantie. Aus der Aussage im Repository sollte nicht werden: „Jede historische Entscheidung und jede Graphbeziehung wird in 5 ms geliefert.“ Wir haben diesen Wert nicht unabhängig reproduziert.
Trennen Sie für eine sinnvolle Messung Prozessstart, erstmaliges Laden des Modells, Embedding der Anfrage, Datenbanksuche, Graph-Erweiterung und Client-Transport. Messen Sie anschließend den vollständigen Werkzeugaufruf. Eine Datenbankabfrage bei warmem Cache ist etwas anderes als eine kalte Suche, eine Remote-Anfrage oder die fertige Antwort des Coding-Modells.
Dokumentieren Sie Rechner, Modell, Anzahl und Länge der Einträge, Anfragetypen, parallele Clients und Aufwärmbedingungen. Stellen Sie Median und langsame Ausreißer neben die fachliche Richtigkeit der Treffer. Unsere Entscheidungsregel: Ein paar gesparte Millisekunden helfen nicht, wenn der Agent eine überholte Architekturentscheidung überzeugend als aktuell darstellt.
Kausales Gedächtnis zur Fehlersuche: Verknüpfungen sind noch kein Beweis
Die Dokumentation zum Wissensgraphen beschreibt unter anderem causes, fixes, contradicts, supports, follows und related. Diese Beziehungstypen können eine Untersuchungskette abbilden. Sie beweisen nicht, dass deren Schlussfolgerung stimmt.
Ein fiktives Beispiel: Commit demo-change-A entfernt einen Idempotenzschutz. Fehler DEMO-42 dokumentiert doppelte Zahlungsereignisse. Patch demo-fix-B stellt den Schutz wieder her. Der Regressionstest test_duplicate_event reproduziert den Fehler vor dem Patch und läuft danach erfolgreich. Speichern Sie die Verweise auf diese Belege zusammen mit der Aussage. Unterscheiden Sie „vermutete Ursache“ von „im geprüften Test bestätigt“.
Ersetzt eine spätere Migration das Design, sollte die Historie erhalten bleiben, die alte Empfehlung aber als abgelöst markiert werden. Ein semantisch passender Treffer kann sonst zu einer falschen technischen Empfehlung werden. Vor einer Änderung sollte der Agent aktuellen Code und relevanten Test prüfen.
Praktische Regeln: Entscheidungen erfassen, gezielt suchen, Altes kennzeichnen
Unser vorgeschlagenes Eintragsmuster enthält Projekt, Komponente, Entscheidung, Begründung, Belegstelle, Quell-Commit, Autor oder Prüfer, Status, Erfassungsdatum und nächsten Prüfanlass. Das ist eine redaktionelle Vorlage für den Inhalt, keine Behauptung über verpflichtende API-Parameter. Speichern Sie pro Eintrag einen dauerhaften Gedanken. Nicht jede vorläufige Überlegung ist eine genehmigte Entscheidung.
Suchen Sie zu Aufgabenbeginn nach der betroffenen Komponente und prüfen Sie den Status der gefundenen Belege. Speichern Sie zum Abschluss nur verifizierte Änderungen und ausdrücklich gekennzeichnete offene Fragen. Trennen Sie „ausprobiert“ von „vom Team genehmigt“. Wichtige betriebliche Bedeutung sollte nicht ohne Prüfung durch automatische Zusammenfassung verändert werden.
Der Leitfaden zum tokensparenden Abruf beschreibt begrenzte Trefferzahlen und graphbasierte Exploration. Dieses beispielhafte Argumentobjekt für memory_search begrenzt Treffer und Zeichen. 6000 ist unser Beispielbudget, weder eine Leistungsempfehlung des Projekts noch eine Tokenanzahl:
{
"query": "Why does example-app use an outbox for payment events?",
"tags": [
"project:example-app"
],
"limit": 5,
"max_response_chars": 6000
}Der Entity-Graph benötigt eine eigene Funktionsprüfung. Ein leeres Ergebnis von memory_explore kann bedeuten, dass noch keine Entitäten angelegt wurden, obwohl Texteinträge vorhanden sind. Die dokumentierte Einstellung MCP_ENTITY_LINKING_ENABLED=1 wirkt auf neu gespeicherte Einträge. Für bestehende Inhalte ist ein ausdrücklich geplanter Wartungs- oder Nachverarbeitungsschritt erforderlich. Führen Sie keinen schreibenden Wartungsbefehl blind aus, nur um einen leeren Graphen zu füllen.
Fehlersuche: Erinnerungen fehlen, verschwinden oder passen nicht
| Symptom | Zuerst prüfen | Benötigter Nachweis |
|---|---|---|
| Funktioniert in Claude Code, nicht in Cursor | Programmpfad, Umgebung, absoluter Datenbankpfad und Betriebssystemkonto | Aufgelöste Einstellungen vergleichen und dieselbe Eintragskennung abrufen. |
| Einträge fehlen nach einem Neustart | Erfolgreiches Schreiben, flüchtige Containerpfade und erneut geöffneter Speicher | Speichern, schließen, neu öffnen und suchen, ohne Gesprächshistorie zu verwenden. |
| Werkzeug verbunden, Agent vergisst trotzdem | Ob Memory-Werkzeuge überhaupt aufgerufen wurden | Tatsächliche Aufrufe prüfen und einen ausdrücklichen Abrufablauf festlegen. |
| Textsuche funktioniert, Graph bleibt leer | Entity-Linking-Konfiguration und vorhandene Entitäten | Entitäten zählen, bevor eine geprüfte Nachverarbeitung geplant wird. |
| Deutsche Fragen finden englische Entscheidungen nicht | Embedding-Modell, Sprache, Textlänge und Filter | Bekannte Einträge mit gleichbedeutenden mehrsprachigen Fragen testen. |
| Dimensionsfehler nach einem Modellwechsel | Modellauswahl, Modellcache und Kompatibilität bestehender Vektoren | Neue Schreibvorgänge stoppen, Sicherung erhalten und Neuberechnung planen. |
| Sporadische Fehler bei mehreren Clients | Parallele Schreibzugriffe, Speicherort und Prozessprotokolle | Mit kontrollierten Clients reproduzieren, bevor Datenbankeinstellungen geändert werden. |
Sicherheitsgrenzen für ein gemeinsames Agentengedächtnis
Behandeln Sie abgerufene Erinnerungen als ungeprüfte Belege, nicht als übergeordnete Anweisungen. Ein Eintrag mit „Ignoriere vorherige Anweisungen“ bleibt Dateninhalt. Jedes Projekt sollte nur die erforderlichen Speicher und Werkzeuge erreichen. Ein Kundendokument darf Entwicklungsregeln nicht unbemerkt überschreiben.
Die MCP-Sicherheitshinweise bieten einen Ausgangspunkt zur Prüfung von Autorisierung und Transport. Unsere betriebliche Empfehlung: Beginnen Sie lokal über stdio, schließen Sie Geheimnisse und Kundentranskripte aus und prüfen Sie einen gemeinsam erreichbaren Endpunkt gesondert. Legen Sie für HTTP Bind-Adresse, Authentifizierung, Berechtigungen, Transportschutz und zulässige Clients ausdrücklich fest. Übernehmen Sie kein Beispiel mit anonymem Zugriff in einen netzwerkseitig erreichbaren Betrieb.
Bestimmen Sie vor automatischer Erfassung, wer Korrekturen, Löschung, Aufbewahrung und Wiederherstellung verantwortet. Testen Sie konsistente Sicherung und Wiederherstellung und prüfen Sie, dass gelöschte oder abgelöste Einträge nicht aus einem zweiten Speicher zurückkehren. Open Source, lokale Embeddings und Tags belegen für sich weder Compliance noch Mandantentrennung.
Ein kleiner Pilot mit aussagekräftigen Abnahmekriterien
Beginnen Sie vor dem Import eines Archivs mit einem bewusst kleinen Bestand. Unser vorgeschlagener Pilot, kein veröffentlichter Benchmark: zehn genehmigte Entscheidungen, fünf abgelöste Entscheidungen, fünf Fehlerbehebungsketten und fünf sprachübergreifende Fragen. Nehmen Sie auch Einträge auf, die ein anderes Projekt nicht sehen darf.
| Prüfung | Aussagekräftiges Ergebnis |
|---|---|
| Kontinuität zwischen Tools | Eine neue Sitzung in jedem Client findet dieselbe Entscheidung mit Kennung und Beleg. |
| Aktualität | Die Antwort nennt die gültige Entscheidung und kennzeichnet die alte als abgelöst. |
| Isolation | Ein Client außerhalb des festgelegten Vertrauensbereichs kann fremde Projekterinnerungen nicht lesen. |
| Belegte Fehlersuche | Der Agent findet Hypothese, Korrektur und Regressionstest, ohne einen Kausalitätsbeweis zu erfinden. |
| Kosten und Latenz | Dauer des Werkzeugaufrufs, Umfang des abgerufenen Kontexts und externe Aufrufe werden getrennt erfasst. |
| Ausfall und Wiederherstellung | Der Agent meldet fehlenden Speicherzugriff ehrlich; eine geprüfte Wiederherstellung erhält die erwarteten Einträge. |
Behalten Sie den Dienst, wenn der Pilot wiederholte Erklärungen reduziert, ohne veraltete oder projektfremde Empfehlungen zu vermehren. Bleiben Sie bei Repository-Anweisungen, wenn vor allem klare Konventionen fehlen. Unser OpenViking-Review behandelt strukturierte Kontextsuche. Der Supermemory-Leitfaden betrachtet Anwendungsgedächtnis und andere Betriebsmodelle.
Unterstützung bei der Umsetzung bieten unsere Leistungen für KI-Entwicklung. Die Twinsoft-AI-Fallstudie liefert angrenzenden Projektkontext, belegt aber keinen Einsatz dieses Tools. Mit unserer Software-QA-Checkliste vor dem Launch lassen sich Pilotprüfungen in Freigabekriterien übersetzen. Für eine abgegrenzte Integration sprechen Sie mit unserem Team.
