Skip to main content
Glama
dcazman

Claude-Atlas-MCP

by dcazman

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-mcp

Kein .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 atlas

Reines Node — 22.13+ für das integrierte node:sqlite. Keine nativen Abhängigkeiten, nichts zu kompilieren:

npm install
npm start

Um 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 trigger_date. Sobald das Datum erreicht ist, erscheint es automatisch zu Beginn einer Unterhaltung und bleibt, bis es verworfen wird. Fügen Sie eine trigger_time hinzu, und es wird zu einer zeitgesteuerten Erinnerung, die einmalig zugestellt werden soll, von etwas, das sie abfragt.

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 — work, personal oder shared. Jeder Tool-Aufruf benötigt einen section. shared ist ein Übergabekanal, den sowohl work- als auch personal-Tokens erreichen können; get_landscape führt ihn in dem Bereich zusammen, den Sie abrufen.

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", research_list zeigt es, wenn Sie fragen

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 (mit shared zusammengefü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 einem trigger_date, einer optionalen trigger_time und 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:

  1. Fragen Sie list_due_reminders in dem für Sie passenden Intervall ab.

  2. Stellen Sie die Zeilen zu, die eine trigger_time enthalten (die passiven warten nur darauf, in der Landschaft gesehen zu werden).

  3. Rufen Sie mark_reminder_fired fü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-mcp

Siehe 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

ATLAS_TOKEN

Ein oder mehrere caller:secret:scope-Tripel, durch Komma getrennt. Scope ist zwingend — work (erreicht work+shared), personal (erreicht personal+shared) oder shared (erreicht nur shared). Wird serverseitig bei jedem Aufruf erzwungen; Anfragen außerhalb des Bereichs erhalten einen 403 und werden protokolliert. Wenn nicht gesetzt, generiert Atlas beim ersten Start einen Token pro Scope und speichert sie in first-run-tokens.txt im Datenverzeichnis.

ATLAS_TZ

IANA-Zeitzone für Erinnerungen, die Zeitfußzeile und das Groom-Fenster (z. B. America/Chicago, Europe/Berlin). Standardmäßig die Host-Zeitzone, dann UTC.

ATLAS_GROOM_HOUR

Stunde des lokalen Tages, zu der die nächtliche Aufräumaktion beginnen kann (0–23, Standard 4).

PORT

Lauschender Port (Standard 7784).

ATLAS_DB_PATH

Pfad zur SQLite-Datei (Standard ../data/atlas.db relativ zu src/; das Docker-Image verwendet /app/data/atlas.db).

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 einen guarded()-Wrapper, der die Bereichsprüfung und den Audit-Eintrag vornimmt. Ein neues Werkzeug ist ein guarded(name, {description, inputSchema}, handler)-Block plus eine Funktion in src/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 in src/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_at durch 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/shared sind in den CHECK-Constraints des Schemas und der Bereichszuordnung in src/server.js festgelegt. Umbenennung ist eine Migration plus eine zweizeilige Kartenbearbeitung – lohnenswert, wenn die Begriffe nicht zu Ihrem Leben passen.

Tests

npm test

Jeder 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.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
5dRelease cycle
2Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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