Skip to main content
Glama
kenningai

temporal-knowledge

by kenningai

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:7687

Oder aus dem Quellcode:

uv sync
uv run kenning-continuity --db-url bolt://localhost:7687

Konfiguration

CLI-Flags haben Vorrang vor Umgebungsvariablen, die Vorrang vor Standardwerten haben.

CLI-Flag

Umgebungsvariable

Standard

Beschreibung

--db-url

NEO4J_URI oder NEO4J_URL

bolt://localhost:7687

Neo4j-Verbindungs-URL

--username

NEO4J_USERNAME

neo4j

Neo4j-Benutzername

--password

NEO4J_PASSWORD

password

Neo4j-Passwort

--database

NEO4J_DATABASE

neo4j

Name der Neo4j-Datenbank

--transport

NEO4J_TRANSPORT

stdio

stdio, sse oder streamable-http

--namespace

NEO4J_NAMESPACE

(keiner)

Präfix für Toolnamen (z. B. myappmyapp-begin_session)

--read-timeout

NEO4J_READ_TIMEOUT

30

Timeout für Leseabfragen, Sekunden

--server-host

NEO4J_MCP_SERVER_HOST

127.0.0.1

HTTP-Host (Nicht-Stdio-Transports)

--server-port

NEO4J_MCP_SERVER_PORT

8000

HTTP-Port (Nicht-Stdio-Transports)

--server-path

NEO4J_MCP_SERVER_PATH

/mcp/

HTTP-Pfad (Nicht-Stdio-Transports)

--allow-origins

NEO4J_MCP_SERVER_ALLOW_ORIGINS

(keiner)

Durch Komma getrennte CORS-Ursprünge

--allowed-hosts

NEO4J_MCP_SERVER_ALLOWED_HOSTS

(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

list_domains

Alle Domänen mit Sitzungszahlen und letzter Aktivität

create_domain

Erstellt eine Wissensdomäne (idempotent)

begin_session

Startet eine Sitzung; gibt session_id zurück. domain, purpose, director und director_key sind alle erforderlich – der Person-Knoten des Direktors wird hier und nirgendwo sonst erstellt

end_session

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

create_knowledge

Erstellt Entitäten. Lehnt bei Kollision ab, lehnt Prozesstypen ab und lehnt unbekannte Felder ab, anstatt sie zu verwerfen

evolve_knowledge

Der einzige Weg, eine Beschreibung zu ändern. Erstellt einen neuen Kettenknoten, der den vorherigen über EVOLVED_FROM bewahrt; behält den ontologischen Typ bei, ersetzt die Unterlabel-Menge

confirm_knowledge

Zeichnet auf, dass Entitäten überprüft und unverändert befunden wurden

merge_knowledge

Verdichtet eine EVOLVED_FROM-Kette zu einem kanonischen Knoten. Zerstörerisch – kann nicht rückgängig gemacht werden

create_connections

Verknüpft Entitäten. Nimmt eine session_id entgegen und zeichnet sie auf jeder Kante auf – eine Kante ist eine Behauptung und erreicht ihren Autor

claim_referent

Behauptet, dass zwei Referenten dasselbe sind, mit einer erforderlichen resolution: proposed, confirmed oder distinct

Abfrage (5)

Werkzeug

Beschreibung

search_knowledge

Volltext über Namen und Beschreibungen, nur Kettenkopf

get_domain_state

Aktuelle Entitäten für eine Domäne; optional types, limit, descriptions

get_session_history

Wer woran wann und zu welchem Zweck gearbeitet hat

get_chain_history

Geht EVOLVED_FROM rückwärts – was zuvor verstanden wurde

read_cypher

Schreibgeschützte Cypher-Notluke; Schreibvorgänge werden abgelehnt

Taxonomie (2)

Werkzeug

Beschreibung

list_knowledge_types

11 ontologische Typen und 7 Unterlabel, mit dem Gitter

list_connection_types

13 Wissens- und 5 Prozesskantentypen

Graphenanalyse (6)

Werkzeug

Beschreibung

gds_create_projection

Erstellt eine GDS-Graphprojektion

gds_drop_projection

Verwirft eine Projektion

gds_pagerank

PageRank-Zentralität

gds_betweenness

Betweenness-Zentralität – Brückenknoten

gds_louvain

Louvain-Community-Erkennung

gds_wcc

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

Actor

Das, was handelt; hat Handlungsmacht

Structure

Anordnung ohne Handlungsmacht; beständige Form

Artifact

Hergestelltes Ding, das fortbesteht und referenziert werden kann

Place

Ein Ort, Campus, Region oder Ausdehnung – immer ein Referent, nie ein Verweiser

Event

Zeitlich verortetes Geschehen

Insight

Eine Erkenntnis, Entdeckung, Durchbruch

Pattern

Wiederkehrende Struktur, die über Instanzen hinweg erkannt wird

Challenge

Gegenwärtiges Hindernis

Solution

Lösung, die funktioniert hat; paart sich mit Challenge

Lesson

Regel, die aus Erfahrung abgeleitet wurde

Rationale

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       → Structure

create_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/pyright

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

Maintenance

ActivityNo data
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Audit-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.
    14
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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

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