temporal-knowledge
Kenning Continuity
Unternehmenswissen, das sich ansammelt, statt abzubauen.
Ein MCP-Server, der LLM-Agenten ermöglicht, organisatorisches Wissen über Sitzungen hinweg anzusammeln, nach Domänen abgegrenzt, unterstützt von Neo4j. Jede strukturelle Invariante wird von einem Werkzeug erzwungen und nicht in einer Anweisung verlangt, und kein roher Cypher-Schreibzugriff ist offengelegt – so kann sich der Graph nicht selbst korrumpieren, egal was das Modell zu tun beschließt.
Er ist in Produktion in Unternehmensgröße: 37 Domänen, 376 Sitzungen und über 3.000 Wissenseinheiten, die in vier Monaten täglicher Nutzung angesammelt wurden.
Warum dies nicht abnimmt, während es sich füllt
Die meisten akkumulierenden Speichersysteme scheitern auf eine von zwei Arten. Sie fabulieren vom ersten Tag an, weil nichts ein beobachtetes Ding von einem Ding unterscheidet, das von einem hilfsbereiten Modell abgeleitet wurde. Oder sie überleben die Demo und verschlechtern sich dann unter der Masse, weil jeder Schreibvorgang ein uneingeschränktes Anhängen ist und der Speicher sich langsam mit Fast-Duplikaten, stillen Überschreibungen und Behauptungen füllt, die niemand einem Autor zuordnen kann.
Vier Verpflichtungen, alle strukturell erzwungen:
Nichts wird überschrieben. Es gibt kein update_knowledge und kein retype_knowledge. Das Ändern dessen, was über eine Entität bekannt ist, erzeugt einen neuen Knoten, der über EVOLVED_FROM mit seinem Vorgänger verknüpft ist. Das frühere Verständnis ist immer noch da, immer noch lesbar, immer noch zuschreibbar. Früher falsch zu liegen ist eine Tatsache über die Aufzeichnung, nicht etwas, das daraus gelöscht werden muss.
Jede Behauptung erreicht ihren Autor in zwei Sprüngen. Eine Wissenseinheit wird von einer Session entdeckt; eine Session wird von einer Person geleitet. Beide Kanten werden von Werkzeugen geschrieben, die sich weigern, ohne einen echten Direktor zu laufen. So ist „wer sagte dies, und wann, und zu welchem Zweck" immer beantwortbar – nicht durch Konvention, sondern weil es keinen Codepfad gibt, der Wissen ohne dies erzeugt.
Identität wird nie aus einer Zeichenkette abgeleitet. Siebzehn Knoten namens „Alice Example" über elf Domänen sind siebzehn Referenzakte, korrekt unterschieden. Zu behaupten, dass zwei von ihnen eine Person sind, ist eine Behauptung, die jemand in einer Sitzung macht, aufgezeichnet als REFERENT_CLAIM, der den Wert distinct tragen kann – denn ein System ohne Ort, um die Antwort nein aufzuzeichnen, wird dieselbe Frage für immer erneut stellen. Zeichenkettenabgleich von Identität ist, wo die meisten Wissensgraphen leise zu lügen beginnen.
Struktur trägt Fakten; Eigenschaften duplizieren sie nicht. Eine Wissenseinheit hat keine domain-Eigenschaft. Sie wird von der Sitzung, die sie entdeckt hat, in eine Domäne platziert und von dort durch einen Spaziergang erreicht. Die Eigenschaft, die diesem vorausging, war abgedriftet, was Denormalisierungen tun: 21 Entitäten trugen eine domain-Zeichenkette, die eine echte Domäne benannte, die überhaupt keinen Pfad zu ihnen hatte. Eine Tatsache, die als Text neben einer Struktur gehalten wird, statt von ihr, ist eine Tatsache, die schließlich mit der Struktur in Konflikt geraten wird.
Es gibt bewusst kein confidence-Feld. Das Vertrauen einer Person bei einer Gelegenheit ist eine Tatsache über ihre Erfahrung und überträgt sich nicht; ein späterer Leser leitet sein eigenes aus der Beschreibung gegen das ab, was er weiß. Was Konfidenzwerte erreichen wollen, wird stattdessen durch Kanten getragen, die jeder Leser beurteilen kann: VALIDATION, INVALIDATING und eine Challenge ohne gepaarte Solution.
Wenn Sie selbst ein akkumulierendes Speichersystem in großem Maßstab betrieben haben und auf diese Wände gestoßen sind, möchten wir von Ihnen hören.
Related MCP server: Neo4j Agent Memory MCP Server
Architektur
Prozessschicht (unveränderlich) – Person → Session, innerhalb Domain → Session. NEXT_SESSION zeigt immer in die Zukunft, erzwungen durch das Werkzeug. Die Mitgliedschaft in dieser Schicht ist die Fähigkeit, mögliche Zukünfte zu halten und sie auf Verwirklichung zu messen; nichts hier ist ein Referent.
Wissensschicht (nur Anhängen) – 11 ontologische Typen und 7 Unterlabel, verbunden durch 13 Verbindungstypen, jeder Knoten markiert als :Knowledge. Beschreibungsänderungen erzeugen einen neuen Kettenknoten, der über EVOLVED_FROM verknüpft ist.
Siehe HOWTO.xml für die betreiberseitige Lehre, die einem LLM als Invariantengerüst gegeben werden soll, und docs/design/ für die Begründung hinter jeder Verpflichtung.
Voraussetzungen
Python 3.10+
Neo4j 5.x-Instanz (lokal oder remote)
uv (für die Entwicklung; nicht zur Installation erforderlich)
Schnellstart
pip install kenning-continuity
kenning-continuity --db-url bolt://localhost:7687Oder aus dem Quellcode:
uv sync
uv run kenning-continuity --db-url bolt://localhost:7687Konfiguration
CLI-Flags haben Vorrang vor Umgebungsvariablen, die Vorrang vor Standardwerten haben.
CLI-Flag | Umgebungsvariable | Standard | Beschreibung |
|
|
| Neo4j-Verbindungs-URL |
|
|
| Neo4j-Benutzername |
|
|
| Neo4j-Passwort |
|
|
| Name der Neo4j-Datenbank |
|
|
|
|
|
| (keiner) | Präfix für Toolnamen (z. B. |
|
|
| Timeout für Leseabfragen, Sekunden |
|
|
| HTTP-Host (Nicht-Stdio-Transports) |
|
|
| HTTP-Port (Nicht-Stdio-Transports) |
|
|
| HTTP-Pfad (Nicht-Stdio-Transports) |
|
| (keiner) | Durch Komma getrennte CORS-Ursprünge |
|
| (keiner) | Durch Komma getrennte Hosts, DNS-Rebinding-Schutz |
MCP-Client-Konfiguration
Claude Desktop / Claude Code
{
"mcpServers": {
"temporal-knowledge": {
"command": "kenning-continuity",
"args": ["--db-url", "bolt://localhost:7687"]
}
}
}HTTP-Transport
kenning-continuity \
--db-url bolt://localhost:7687 \
--transport streamable-http \
--server-host 0.0.0.0 \
--server-port 8000 \
--allow-origins "http://localhost:3000" \
--allowed-hosts "localhost,127.0.0.1"Werkzeugoberfläche (23 Werkzeuge)
Eine Sitzung läuft: create_domain (einmal) → begin_session → Wissen erstellen / weiterentwickeln / bestätigen / verbinden → end_session.
Der Server ist zustandslos. begin_session gibt eine session_id zurück, die der Client an jedes nachfolgende Wissenswerkzeug übergibt. Eine nie geschlossene Sitzung bleibt active – absichtlich.
Prozess (4)
Werkzeug | Beschreibung |
| Alle Domänen mit Sitzungszahlen und letzter Aktivität |
| Erstellt eine Wissensdomäne (idempotent) |
| Startet eine Sitzung; gibt |
| Schließt eine Sitzung mit einer Zusammenfassung des Gelernten |
begin_session gibt eine Zählung nach Typ zurück, nicht den Domänenzustand. Das Inline-Zurückgeben des Zustands waren 600.820 Zeichen in einer Produktionsdomäne – etwa 150.000 Token, die ausgegeben wurden, bevor die Sitzung eine Frage gestellt hatte. Rufen Sie get_domain_state mit types und limit für den Teil auf, den Sie tatsächlich benötigen.
Wissensmutation (6)
Werkzeug | Beschreibung |
| Erstellt Entitäten. Lehnt bei Kollision ab, lehnt Prozesstypen ab und lehnt unbekannte Felder ab, anstatt sie zu verwerfen |
| Der einzige Weg, eine Beschreibung zu ändern. Erstellt einen neuen Kettenknoten, der den vorherigen über |
| Zeichnet auf, dass Entitäten überprüft und unverändert befunden wurden |
| Verdichtet eine |
| Verknüpft Entitäten. Nimmt eine |
| Behauptet, dass zwei Referenten dasselbe sind, mit einer erforderlichen |
Abfrage (5)
Werkzeug | Beschreibung |
| Volltext über Namen und Beschreibungen, nur Kettenkopf |
| Aktuelle Entitäten für eine Domäne; optional |
| Wer woran wann und zu welchem Zweck gearbeitet hat |
| Geht |
| Schreibgeschützte Cypher-Notluke; Schreibvorgänge werden abgelehnt |
Taxonomie (2)
Werkzeug | Beschreibung |
| 11 ontologische Typen und 7 Unterlabel, mit dem Gitter |
| 13 Wissens- und 5 Prozesskantentypen |
Graphenanalyse (6)
Werkzeug | Beschreibung |
| Erstellt eine GDS-Graphprojektion |
| Verwirft eine Projektion |
| PageRank-Zentralität |
| Betweenness-Zentralität – Brückenknoten |
| Louvain-Community-Erkennung |
| Schwach zusammenhängende Komponenten |
Typsystem
Jeder Wissensknoten trägt :Knowledge, genau ein ontologisches Label, eine ont_type-Eigenschaft, die dieses Label deterministisch benennt, und null oder mehr Unterlabel über Neo4j-Multi-Labeling.
Ontologischer Typ | Was es ist |
| Das, was handelt; hat Handlungsmacht |
| Anordnung ohne Handlungsmacht; beständige Form |
| Hergestelltes Ding, das fortbesteht und referenziert werden kann |
| Ein Ort, Campus, Region oder Ausdehnung – immer ein Referent, nie ein Verweiser |
| Zeitlich verortetes Geschehen |
| Eine Erkenntnis, Entdeckung, Durchbruch |
| Wiederkehrende Struktur, die über Instanzen hinweg erkannt wird |
| Gegenwärtiges Hindernis |
| Lösung, die funktioniert hat; paart sich mit |
| Regel, die aus Erfahrung abgeleitet wurde |
| Der Grund hinter etwas |
Unter-Labels sind ein Gitter, keine flache Karte
PersonReferent → Actor System → Structure
Organization → Actor Process → Structure
Team → Organization → Actor Configuration → Structure
Service → Structurecreate_knowledge akzeptiert entweder einen ontologischen Typ (Actor) oder ein Unter-Label (Team) und wendet die gesamte Kette an: :Knowledge:Actor:Organization:Team. Eine Abfrage nach Organisationen findet daher auch Teams. Eine flache Karte würde :Actor:Team ausgeben, die mittlere Ebene stillschweigend weglassen, und nichts würde es melden.
Verbindungstypen (13)
EVOLVED_FROM, ENABLING, REQUIRING, INFORMING, CAUSING, COMPOSING,
EXTENDING, RECOGNITION, VALIDATION, INVALIDATING, ASSOCIATED_WITH,
SITUATED_AT, REFERENT_CLAIM.
Prozesskanten – HAS_SESSION, NEXT_SESSION, DIRECTED, DISCOVERED,
CONFIRMED – werden nur von Prozesswerkzeugen geschrieben und können nicht über
create_connections erstellt werden.
Was eine Beschreibung sagen sollte
Eine Beschreibung sagt, was die Entität ist, nicht, was mit ihr oder um sie herum passiert ist. Zeitliche Beobachtungen gehören zu Event-Knoten, die über Kanten erreicht werden.
Richtig, für einen
Actor:PersonReferent: "Gründer von lululemon. Größter Einzelaktionär (8.4 %). Eingereicht nach Schedule 13D – nicht passiv."Falsch: "SCHEDULE 13D/A Änderung Nr. 10 eingereicht am 8. Okt. 2025. WILSON GEHT AN DIE ÖFFENTLICHKEIT…"
Die Einreichung ist ein Event. Wilson ist der Gründer. Die Tatsache, dass die Einreichung etwas über ihn offenbart, ist eine INFORMING-Kante. Seine Beschreibung sollte unverändert jede Anzahl zukünftiger Einreichungen überstehen, es sei denn, seine Identität selbst ändert sich.
Entwicklung
uv sync --group dev
./.venv/bin/pytest tests/unit # mocked substrate, no database
./.venv/bin/pytest tests/integration # real Neo4j via testcontainers; needs Docker
./.venv/bin/pyrightEin Fehler, der in einer Cypher-Abfrage lebt, ist für die Unit-Tests unsichtbar – sie mocken das Substrat, und ein Kanten-Erzeugungsfehler bestand einmal jeden von ihnen identisch vor und nach der Korrektur. Alles, was eine Abfrage betrifft, gehört in tests/integration/.
Lizenz und Namensnennung
Lizenziert unter der Apache License, Version 2.0. Nutzen Sie sie, modifizieren Sie sie, führen Sie sie in Produktion aus, kommerziell oder anderweitig.
Die Arbeit hier ist die Ontologie – das Typ-Gitter, die Auflösung durch Begehung, die Platzierung des erkenntnistheoretischen Status in Kanten, das Prinzip, dass jede Invariante in einem Werkzeug lebt. Das wird frei gegeben, und Apache-2.0 verlangt nur, dass die Namensnennung mitreist: Behalten Sie LICENSE und NOTICE und markieren Sie, was Sie geändert haben.
Der Name Kenning AI ist nicht Teil dieser Gewährung (Apache-2.0 §6). Siehe TRADEMARKS.md für das, was Sie ohne Nachfrage tun dürfen – das ist fast alles, einschließlich der Angabe, worauf Ihre Software aufbaut.
Kontakt
contact@kenningai.com – kein Formular, kein Trichter, es erreicht uns direkt.
Wir sind besonders daran interessiert, von jedem zu hören, der ein akkumulierendes Gedächtnissystem in großem Maßstab betrieben hat und eine Meinung dazu entwickelt hat, warum sie scheitern. Dieser Fehlermodus ist der Grund für fast jede Entscheidung in diesem Repository, und Widerspruch von jemandem, der es selbst erlebt hat, ist uns mehr wert als Zustimmung von jemandem, der es nicht hat.
Kenning AI · kenningai.com
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
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 Connectors
Company brain for AI agents — temporal knowledge graph search, exploration, and durable memory.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Persistent knowledge graph for AI-augmented teams. Store decisions, findings, and standing rules across agent sessions with semantic search and typed connections. Includes cross-session memory, audit trail, workspace isolation, and secret detection. Built for teams running agents that need to remember. Free until launch with team tier as default, anon trial available.
Versioned agent memory in your own Postgres: portable context, permissioned, audit trail.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables storage and retrieval of knowledge in a graph database format, allowing users to create, update, search, and delete entities and relationships in a Neo4j-powered knowledge graph through natural language.5-
- AlicenseAqualityCmaintenanceEnables AI agents to store, retrieve, and connect information in a Neo4j graph database as persistent memory, with semantic relationships, natural language search, and temporal tracking across conversations.9069MIT
- AlicenseNot gradedqualityBmaintenanceAudit-grade memory backbone for agent teams. Bi-temporal facts (event time + transaction time, with recall(as_of=...) replay), 6-step deterministic retrieval (no LLM in the critical path), conversation ingest with speaker-locked dual-pass extraction, per-tenant Postgres row-level security, and Ed25519-signed provenance. Postgres + pgvector + Neo4j defaults.14MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent knowledge graph memory for AI agents, enabling them to store, recall, and query facts about people, projects, and relationships across sessions.MIT
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/kenningai/kenning-continuity'
If you have feedback or need assistance with the MCP directory API, please join our Discord server