Claude-Atlas-MCP
Claude-Atlas-MCP
Selbst gehosteter MCP-Server, der Claude einen persistenten Speicher über mehrere Unterhaltungen hinweg bietet — Entitäten, Beobachtungen, Verlauf, zeitgesteuerte Erinnerungen, plus ein Tablett für eingehende Dinge und ein Regal für Ideen — in einem leichten Node/SQLite-Backend, das Sie selbst betreiben.
Richten Sie Claude als MCP-Connector darauf aus, und es kann sich von einer Unterhaltung zur nächsten merken, woran Sie arbeiten: laufende Projekte, Entscheidungen und deren Begründung, Fakten über Sie und Ihre Umgebung sowie Dinge, die zu einem späteren Zeitpunkt wieder auftauchen sollen.
Warum
Claude vergisst alles, wenn eine Unterhaltung endet. Atlas ist eine kleine, unspektakuläre, dauerhafte Speicherschicht, die Ihnen vollständig gehört — kein Drittanbieterdienst, keine Herstellerbindung. Es ist ein einzelner Node-Prozess, der von einer einzigen SQLite-Datei unterstützt wird. Betreiben Sie es auf einem Heimserver, einem VPS oder Ihrem Laptop.
Es startet absichtlich leer. Es gibt kein vorgegebenes Schema Ihres Lebens, keinen angenommenen Job, keinen erforderlichen Issue-Tracker — nur eine Struktur, die sich füllt, während Sie sie nutzen.
Related MCP server: Cortex
Schnellstart
git clone https://github.com/dcazman/Claude-Atlas-MCP.git
cd Claude-Atlas-MCP
docker compose up -d --build
docker compose logs atlas-mcpKein .env, kein Token, keine Konfiguration. Beim ersten Start erstellt Atlas die Datenbank, generiert einen Token pro Bereich und gibt sie aus:
work 3f2a… (caller "work-client")
personal 9c41… (caller "personal-client")
shared b7e0… (caller "shared-client")
Connect a client to: http://localhost:7784/atlas-mcp?token=<one of the above>Die Tokens werden neben der Datenbank gespeichert und bei jedem Neustart wiederverwendet. Die Daten befinden sich in ./data, einer einzigen SQLite-Datei. Das ist die gesamte Einrichtung.
Überprüfen Sie, ob es funktioniert hat:
curl -s localhost:7784/health
# {"ok":true,"service":"atlas-mcp","version":2,"port":"7784"}
TOKEN=<one of the tokens printed above>
curl -s -X POST localhost:7784/atlas-mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-H "x-atlas-token: $TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":
{"name":"add_observation","arguments":
{"section":"work","entity":"Atlas","content":"Installed today."}}}'Wenn dies eine observation_id zurückgibt, funktioniert der gesamte Stack: Ihre erste Erinnerung liegt auf der Festplatte und Claude kann sie zurücklesen.
CI veröffentlicht bei jedem Push auf main ein Image, falls Sie nicht selbst bauen möchten:
docker run -d --name atlas -p 7784:7784 -v "$PWD/atlas-data:/app/data" \
ghcr.io/dcazman/claude-atlas-mcp:latest
docker logs atlasReines Node — 22.13+ für das integrierte node:sqlite. Keine nativen Abhängigkeiten, nichts zu kompilieren:
npm install
npm startUm eigene Tokens, Zeitzone oder Pflegestunde anstelle der Standardeinstellungen zu wählen,
cp .env.example .env und kommentieren Sie aus, was Sie möchten. Das unveränderte Kopieren ändert
nichts — jede Zeile ist absichtlich auskommentiert.
Datenmodell
Konzept | Was es ist |
Entität | Ein Thema oder Projekt, das Claude verfolgen soll (z. B. "Heimnetzwerk", "Q3-Planung"). Hat einen Namen und eine einzeilige Zusammenfassung. |
Beobachtung | Eine einzelne Tatsache, die an eine Entität angehängt ist ("Router am 01.06.2026 auf das 6E-Band umgestellt"). Die atomare Einheit des Speichers. Direkt bearbeitbar und als geschützt markierbar, sodass sie korrigiert, aber nie gelöscht werden kann. |
Verlaufsereignis | Ein bemerkenswertes Ereignis, das protokolliert und später abgerufen werden kann. |
Erinnerung | Eine Notiz mit einem |
Tablett-Element | Etwas, das eingetroffen ist und bearbeitet werden muss, aber nicht von dem ablenken soll, was Sie gerade tun. Jetzt erfassen, später entscheiden. |
Regal-Element | Eine Ihrer eigenen Ideen. Kein Datum, kein Druck, keine Alterung. |
Bereich | Ein übergeordneter Namensraum — |
Der Trichter
Drei Oberflächen, in aufsteigender Reihenfolge der Verbindlichkeit:
shelf ──graduate──▶ tray ──promote──▶ memory
(ideas) (triage) (observations)Das Regal enthält Dinge, an die Sie gedacht haben. Eine Idee, die ein Jahr dort liegt, ist kein Backlog-Versagen — es ist das Regal, das funktioniert. Ideen verlassen es, indem sie in das Tablett aufsteigen oder absichtlich beendet werden, wobei der Grund erhalten bleibt.
Das Tablett enthält Dinge, die eingetroffen sind. Es ist eine Warteschlange, kein Stapel: erfassen, dann befördern, zusammenführen oder ablehnen.
Der Speicher ist der Teil, den Claude zu Beginn einer Unterhaltung zurückliest.
Nichts wird auf dem Weg dorthin zerstört. Erledigte Elemente werden nicht mehr angezeigt, behalten aber ihren Verlauf, einschließlich dessen, was aus ihnen geworden ist.
Wie Sie diese Dinge tatsächlich sehen. get_landscape ist der eine Aufruf, den Claude zu Beginn einer Unterhaltung tätigt, sodass alles, was Ihre Aufmerksamkeit erfordert, darin zurückkommen muss:
Oberfläche | In der Landschaft | Warum |
Speicher | vollständig | es ist der Kontext, auf dem die Unterhaltung basiert |
Fällige Erinnerungen | vollständig | der ganze Sinn besteht darin, ungefragt wieder aufzutauchen |
Tablett | vollständig | eine unbearbeitete Erfassung wartet auf eine Entscheidung von Ihnen |
Regal | nur eine Anzahl | das Aufzählen jeder Idee in jeder Unterhaltung würde ein druckloses Regal in einen nervigen Backlog verwandeln — die Anzahl sagt "da ist etwas", |
So funktioniert "Jetzt erfassen, später entscheiden": Was auch immer Sie mitten in einer Unterhaltung in das Tablett legen, kommt zu Beginn der nächsten wieder, ohne dass Sie sich daran erinnern müssen, dass es existiert.
Werkzeuge
31 MCP-Werkzeuge.
Lesen
get_landscape— alles in einem Bereich (mitsharedzusammengeführt): alle Entitäten mit ihren Beobachtungen, fällige Erinnerungen, unbearbeitete Tablett-Elemente und eine Anzahl offener Regal-Ideen. Rufen Sie es zu Beginn einer Unterhaltung auf, um sich zu orientieren.search— Stichwortsuche über Entitäten, Beobachtungen und Verlauf.get_entity— eine Entität und ihre Beobachtungen anhand des Namens.get_observation— bis zu 20 Beobachtungen direkt anhand der ID abrufen. IDs sind stabil und werden nie wiederverwendet, was sie zu einer günstigen Möglichkeit macht, bestimmte Fakten von einer Unterhaltung zur nächsten zu übergeben.get_history— die Zeitleiste protokollierter Ereignisse.get_time— aktuelle Uhrzeit plus die Zeit seit dem letzten Aufruf dieses Tokens.
Schreiben
upsert_entity— Name/Zusammenfassung einer Entität erstellen oder aktualisieren.add_observation— eine Tatsache an eine Entität anhängen.update_observation— eine Tatsache direkt bearbeiten; die ID bleibt stabil. Funktioniert bei geschützten Zeilen.remove_observation— eine veraltete oder erledigte Tatsache entfernen (verweigert, wenn geschützt).protect_observation/unprotect_observation— eine Tatsache als un löschbar markieren oder diesen Schutz aufheben.remove_entity— eine Entität und ihre Beobachtungen löschen (verweigert, wenn eine davon geschützt ist).log_event— ein bemerkenswertes Ereignis im Verlauf protokollieren.
Erinnerungen
create_reminder— eine Notiz mit einemtrigger_date, einer optionalentrigger_timeund einer optionalen Entitätsverknüpfung.list_reminders— alles Geplante, fällig oder nicht.list_due_reminders— alles, was gerade fällig ist. Dies wird von einem Benachrichtiger abgefragt.mark_reminder_fired— eine zeitgesteuerte Erinnerung als zugestellt markieren, damit sie nie zweimal ausgelöst wird.dismiss_reminder— eine Erinnerung als erledigt markieren (sie wird nicht mehr angezeigt).remove_reminder— eine Erinnerung vollständig löschen.
Tablett
pending_add— etwas erfassen, das eingetroffen ist.pending_list— was noch bearbeitet werden muss, ältestes zuerst.pending_promote— eine Erfassung in eine Beobachtung an einer Entität umwandeln.pending_merge— ein Duplikat in das behaltene Exemplar einarbeiten.pending_dismiss— entscheiden, dass nichts nötig ist, wobei der Grund erhalten bleibt.pending_reopen— eine der obigen Aktionen rückgängig machen.
Regal
research_add— eine Idee ablegen.research_list— offene Ideen, älteste zuerst.research_promote— eine Idee in das Tablett befördern.research_kill— eine Idee absichtlich beenden, mit Angabe des Grundes.research_reopen— sie zurücklegen.
Jede Tool-Antwort enthält eine kleine Zeitfußzeile — aktuelle Serverzeit in Ihrer konfigurierten Zeitzone, plus die verstrichene Zeit seit dem letzten Aufruf dieses Tokens —, sodass das Modell nie raten oder Datumsberechnungen mit einer veralteten mentalen Uhr durchführen muss.
Benachrichtigungen erhalten
Atlas sendet nie selbst etwas — es hat keine Ahnung, wo Sie erreicht werden möchten.
Stattdessen ist list_due_reminders der Vertrag für alles, was dies tut:
Fragen Sie
list_due_remindersin dem für Sie passenden Intervall ab.Stellen Sie die Zeilen zu, die eine
trigger_timeenthalten (die passiven warten nur darauf, in der Landschaft gesehen zu werden).Rufen Sie
mark_reminder_firedfür jede von Ihnen zugestellte Zeile auf.
Schritt 3 sorgt für eine exakt einmalige Zustellung: Der Stempel ist in SQL geschützt, sodass zwei sich überschneidende Abfrager nicht doppelt senden können. Ein Dutzend Zeilen eines cron-gesteuerten Skripts reichen aus, um dies mit E-Mail, einem Chat-Webhook oder einer Telefonbenachrichtigung zu verbinden.
Pflege-Worker
src/groom.js läuft nächtlich innerhalb des Serverprozesses (kein Host-Cron erforderlich) oder
auf Abruf mit npm run groom. Es ist absichtlich berichtsorientiert und mechanisch —
keine LLM-Aufrufe, keine Löschung Ihrer Daten:
kennzeichnet wahrscheinlich nahezu doppelte Beobachtungen innerhalb einer Entität
kennzeichnet ruhende Entitäten (60+ Tage unberührt) als Kandidaten für Archivierung/Kompression
kennzeichnet lange verworfene Erinnerungen (90+ Tage) als Löschkandidaten
rotiert sein eigenes
audit_log(90+ Tage) — das Einzige, was es tatsächlich löschtüberspringt Entitäten, die seit dem letzten Lauf unberührt sind, sodass wiederholte Läufe günstig sind
Die Ergebnisse landen in einer bereichsspezifischen "Groom Report"-Entität, damit Sie (oder Claude) darauf reagieren können.
Es läuft um ATLAS_GROOM_HOUR (Standard 4 Uhr morgens) in Ihrer Zeitzone und heilt sich selbst: Ein
verpasstes Fenster, weil der Container ausgefallen war, wird beim nächsten Check ausgeführt.
Claude verbinden
Atlas spricht MCP über streamable HTTP unter POST /atlas-mcp. Fügen Sie es als Connector hinzu, indem Sie die URL des Servers mit Ihrem Token verwenden:
https://<your-host>/atlas-mcp?token=<your-secret>Das Token ist die geheime Hälfte eines ATLAS_TOKEN-Triples (siehe Konfiguration). Sie können es auch als X-Atlas-Token-Header oder als Bearer-Token anstelle des Query-Strings übergeben.
Es gibt keinen section in der URL — jedes Tool akzeptiert ein section-Argument, und welches eine bestimmte Unterhaltung standardmäßig verwenden soll, wird am besten in den benutzerdefinierten Anweisungen Ihres Claude-Projekts festgelegt (z. B. "Ihr Atlas-Bereich ist personal"). Ein GET /health-Endpunkt ist für Lebendigkeitsprüfungen verfügbar.
Für den produktiven Einsatz sollte es hinter HTTPS betrieben werden — ein Reverse-Proxy oder ein Tunnel (Cloudflare Tunnel, Tailscale, nginx usw.) vor dem Container. Das Token ist die einzige Authentifizierung, daher setzen Sie den Port nicht ohne TLS öffentlich frei.
Nach der Verbindung ist es eine gute Gewohnheit, Claude zu Beginn jeder Unterhaltung get_landscape aufrufen zu lassen und Einträge zu aktualisieren, wenn sich Dinge ändern. Der Server enthält Anweisungen, die genau das besagen, sodass die meisten Clients dies ohne Ihr Zutun übernehmen.
Absicherung
Die integrierte Authentifizierung von Atlas ist ein gemeinsames Token — in Ordnung hinter einem privaten Netzwerk oder Tunnel, aber dünn, wenn Sie es dem Internet aussetzen. Für eine echte Zugriffskontrolle setzen Sie ein dediziertes Auth-Gateway davor, anstatt diesen Server selbst zu härten.
mcp-auth-proxy ist ein einsatzbereites OAuth 2.1 / OIDC Gateway für MCP-Server — ohne Codeänderungen an Atlas:
Authentifizierung gegen Ihren eigenen IdP (Google, GitHub, Okta, Auth0, Azure AD, Keycloak, jeder OIDC-Anbieter) mit optionalem Passwort.
Autorisierung von Benutzern durch exakte Übereinstimmung oder Glob (z. B.
*@yourcompany.com).Beendet TLS und leitet HTTP-Transports unverändert weiter, getestet mit Claude, Claude Code, ChatGPT, Copilot und Cursor.
Grob gesagt, würden Sie es auf den HTTP-Endpunkt von Atlas richten:
./mcp-auth-proxy \
--external-url https://<your-domain> \
--tls-accept-tos \
-- http://localhost:7784/atlas-mcpSiehe Dokumentation für IdP-Einrichtung und Konfiguration. (Nicht verbunden — nur eine gute Passung für selbst gehostete MCP-Server wie diesen.)
Konfiguration
Alle optional. Einstellung über .env (siehe .env.example) oder die Umgebung:
Variable | Zweck |
| Ein oder mehrere |
| IANA-Zeitzone für Erinnerungen, die Zeitfußzeile und das Groom-Fenster (z. B. |
| Stunde des lokalen Tages, zu der die nächtliche Aufräumaktion beginnen kann (0–23, Standard 4). |
| Lauschender Port (Standard 7784). |
| Pfad zur SQLite-Datei (Standard |
Eigenständig anpassen
Das Design ist bewusst klein gehalten, sodass Sie es erweitern können, ohne dagegen ankämpfen zu müssen.
Werkzeug hinzufügen. Alles befindet sich in
src/tools.js, registriert durch einenguarded()-Wrapper, der die Bereichsprüfung und den Audit-Eintrag vornimmt. Ein neues Werkzeug ist einguarded(name, {description, inputSchema}, handler)-Block plus eine Funktion insrc/db.js. Die Beschreibung ist wichtiger als der Code – sie ist das, was Claude liest, um zu entscheiden, wann es darauf zugreifen soll.Tabelle hinzufügen. Migrationen sind eine
PRAGMA user_version-Leiter insrc/db.js: Nummer erhöhen, additives SQL mit dieser Prüfung schreiben, fertig. Jede Migration ist idempotent und wird beim Start ausgeführt, sodass ein Upgrade einfach ein Neustart ist.Regeln in die Datenbank verschieben. Der Hausstil hier ist: Eine Regel, an die Sie sich erinnern müssen, ist eine Regel, die gebrochen wird – daher wird
resolved_atdurch einen Trigger gesetzt, der Bereich wird serverseitig erzwungen, und geschützte Zeilen werden in SQL geschützt. Folgen Sie dem Muster, und Ihre Ergänzungen erben es.Abschnitte ändern.
work/personal/sharedsind in den CHECK-Constraints des Schemas und der Bereichszuordnung insrc/server.jsfestgelegt. Umbenennung ist eine Migration plus eine zweizeilige Kartenbearbeitung – lohnenswert, wenn die Begriffe nicht zu Ihrem Leben passen.
Tests
npm testJeder Lauf startet mit einer leeren Datenbank, sodass die Suite gleichzeitig als Blankoscheck dient: Schema wird aus dem Nichts aufgebaut, die Token-Bereichsmatrix hält (einschließlich, dass IDs außerhalb des Bereichs von nicht vorhandenen nicht unterscheidbar sind), zeitgesteuerte Erinnerungen feuern genau einmal, und der Trichter bewegt Elemente so, wie er es verspricht.
Sicherheit
Siehe SECURITY.md für das Bedrohungsmodell, Hinweise zur Härtung der Bereitstellung und wie Sie eine Sicherheitslücke melden können.
Änderungen
Siehe CHANGELOG.md. Kurzfassung: v3 fügte das Tablett, das Regal, zeitgesteuerte Erinnerungen, Beobachtungs-ID-Adressierung und einen Null-Konfigurations-Start hinzu.
Lizenz
MIT — siehe LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives Claude Code cross-session memory persisted to a plain .claude-memory.md file in your repo.MIT
- AlicenseNot gradedqualityDmaintenancePersistent memory MCP server for Claude Code that captures and recalls project context across sessions, eliminating the need to re-explain architecture and decisions daily.2531MIT
- AlicenseNot gradedqualityDmaintenanceLong-term memory MCP server for Claude Code with SQLite persistence, encryption, semantic search, and automatic memory linking.261MIT
- FlicenseNot gradedqualityDmaintenanceA lightweight MCP memory server built on SQLite + FTS5, providing cross-session long-term memory for Claude Code.
Related MCP Connectors
Cloud-hosted MCP server for durable AI memory
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dcazman/Claude-Atlas-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server