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? Beginne 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 musst du insbesondere die ausführbare Datei der virtuellen Umgebung und die absoluten Speicherpfade anpassen. Übernimm POSIX-Pfade nicht unverändert. Nutze 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.
Ersetze example-app überall einheitlich durch ein Projekt beziehungsweise einen klar abgegrenzten Vertrauensbereich. Trenne 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 dein 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üfe parallele Zugriffe vor der produktiven Nutzung. Lege eine aktive SQLite-Datenbank weder in Git noch in einen synchronisierten Ordner, den du wie eine Datenbankreplikation behandelst.
Claude Code über lokales MCP verbinden
Führe 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 deiner 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.
Starte oder verbinde den Client anschließend neu und prüfe den Verbindungsstatus sowie die Werkzeuge memory_store und memory_search. Gib nur erwartete Aktionen frei. Ein verbundener Server beweist noch nicht, dass bereits ein Eintrag gespeichert wurde.
Cursor für denselben Memory-Speicher konfigurieren
Ergänze diesen Eintrag in der projektbezogenen Datei .cursor/mcp.json. Erhalte 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üfe den aufgelösten Pfad, verbinde den Server neu und lies 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änzt du 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.
Beginne 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üfe den tatsächlichen Abruf, nicht die Zusicherung des Agenten. Fordere 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änze eine fiktive Entscheidungsreferenz, Status und Datum. Verwende keine echten Kundendaten.
Kontrolliere die erfolgreiche Rückmeldung des Speicherwerkzeugs. Schließe die Sitzung. Frage in einer neuen Cursor-Sitzung mit einem ausdrücklichen Aufruf von memory_search nach dem Grund für die Zahlungs-Outbox. Vergleiche Kennung und Inhalt des zurückgegebenen Eintrags. Eine plausible Antwort aus allgemeinem Modellwissen reicht nicht. Wiederhole den Test in OpenCode und nach einem Neustart der Client-Prozesse.
Ergänze 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üfe fehlende und unerwünschte Treffer, bevor du automatische Erfassung aktivierst.
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üfe 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: Speichere eine genehmigte Entscheidung auf Englisch und frage mit realistischen Entwicklerformulierungen auf Deutsch, Spanisch und Chinesisch danach. Miss, 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.
Trenne für eine sinnvolle Messung Prozessstart, erstmaliges Laden des Modells, Embedding der Anfrage, Datenbanksuche, Graph-Erweiterung und Client-Transport. Miss 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.
Dokumentiere Rechner, Modell, Anzahl und Länge der Einträge, Anfragetypen, parallele Clients und Aufwärmbedingungen. Stelle 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. Speichere die Verweise auf diese Belege zusammen mit der Aussage. Unterscheide „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. Speichere pro Eintrag einen dauerhaften Gedanken. Nicht jede vorläufige Überlegung ist eine genehmigte Entscheidung.
Suche zu Aufgabenbeginn nach der betroffenen Komponente und prüfe den Status der gefundenen Belege. Speichere zum Abschluss nur verifizierte Änderungen und ausdrücklich gekennzeichnete offene Fragen. Trenne „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ühre 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
Behandle 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: Beginne lokal über stdio, schließe Geheimnisse und Kundentranskripte aus und prüfe einen gemeinsam erreichbaren Endpunkt gesondert. Lege für HTTP Bind-Adresse, Authentifizierung, Berechtigungen, Transportschutz und zulässige Clients ausdrücklich fest. Übernimm kein Beispiel mit anonymem Zugriff in einen netzwerkseitig erreichbaren Betrieb.
Bestimme vor automatischer Erfassung, wer Korrekturen, Löschung, Aufbewahrung und Wiederherstellung verantwortet. Teste konsistente Sicherung und Wiederherstellung und prüfe, 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
Beginne 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. Nimm 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. |
Behalte den Dienst, wenn der Pilot wiederholte Erklärungen reduziert, ohne veraltete oder projektfremde Empfehlungen zu vermehren. Bleib 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 sprich mit unserem Team.
