Skip to main content
Glama
kenningai

temporal-knowledge

by kenningai

Kenning Continuity

Conocimiento empresarial que se acumula en lugar de degradarse.

Un servidor MCP que permite a los agentes LLM acumular conocimiento organizativo a lo largo de las sesiones, delimitado por dominio, con Neo4j como respaldo. Cada invariante estructural la impone una herramienta en lugar de pedirse en una instrucción, y no se expone ninguna escritura Cypher en bruto, de modo que el grafo no puede corromperse sin importar lo que decida hacer el modelo.

Está en producción a escala empresarial: 37 dominios, 376 sesiones y 3,000+ entidades de conocimiento acumuladas durante cuatro meses de uso diario.

Por qué esto no se degrada al llenarse

La mayoría de los sistemas de memoria acumulativa fallan de una de dos maneras. Confabulan desde el primer día, porque nada distingue una cosa que fue observada de una cosa que fue inferida por un modelo que intenta ser útil. O sobreviven a la demo y luego se degradan bajo el peso de la acumulación, porque cada escritura es una adición sin restricciones y el almacén se llena lentamente de casi-duplicados, sobrescrituras silenciosas y afirmaciones que nadie puede rastrear hasta un autor.

Cuatro compromisos, todos impuestos estructuralmente:

Nada se sobrescribe. No existe update_knowledge ni retype_knowledge. Cambiar lo que se sabe sobre una entidad crea un nodo nuevo enlazado con su predecesor mediante EVOLVED_FROM. La comprensión anterior sigue ahí, sigue siendo legible, sigue siendo atribuible. Haber estado equivocados antes es un hecho sobre el registro, no algo que deba borrarse de él.

Toda afirmación llega a su autor en dos saltos. Una entidad de conocimiento es descubierta por una Session; una Session está dirigida por una Person. Ambas aristas las escriben herramientas que se niegan a ejecutarse sin un director real. Así, «quién dijo esto, y cuándo, y con qué propósito» siempre se puede responder, no por convención, sino porque no existe ninguna ruta de código que cree conocimiento sin ello.

La identidad nunca se infiere de una cadena. Diecisiete nodos llamados «Alice Example» en once dominios son diecisiete actos de referencia, correctamente distintos. Afirmar que dos de ellos son una misma persona es una afirmación que alguien hace, en una sesión, registrada como REFERENT_CLAIM que puede contener el valor distinct — porque un sistema sin un lugar donde registrar la respuesta no volverá a hacer la misma pregunta eternamente. La identidad por coincidencia de cadenas es donde la mayoría de los grafos de conocimiento empiezan a mentir en silencio.

La estructura transporta los hechos; las propiedades no los duplican. Una entidad de conocimiento no tiene propiedad domain. La coloca en un dominio la sesión que la descubrió y desde allí se llega a ella mediante un recorrido. La propiedad que precedió a esto se había desviado, que es lo que hacen las desnormalizaciones: 21 entidades llevaban una cadena domain que nombraba un dominio real sin ninguna ruta hacia ellas. Un hecho mantenido como texto junto a una estructura, en lugar de ser sostenido por ella, es un hecho que acabará discrepando de la estructura.

No hay campo confidence, deliberadamente. La confianza de alguien en una ocasión es un hecho sobre su experiencia y no se transmite; un lector posterior deriva la suya a partir de la descripción y de lo que sabe. Lo que las puntuaciones de confianza intentan alcanzar lo transportan en su lugar aristas que cualquier lector puede juzgar: VALIDATION, INVALIDATING y un Challenge sin Solution asociado.

Si has ejecutado un sistema de memoria acumulativa a escala y también te has topado con estos muros, queremos saber de ti.

Related MCP server: Neo4j Agent Memory MCP Server

Arquitectura

Capa de proceso (inmutable) — Person → Session, dentro de Domain → Session. NEXT_SESSION siempre apunta hacia delante en el tiempo; así lo impone la herramienta. La pertenencia a esta capa es la capacidad de contener futuros posibles y medirlos hacia su materialización; nada aquí es un referente.

Capa de conocimiento (solo anexión) — 11 tipos ontológicos y 7 subetiquetas, conectados por 13 tipos de conexión, cada nodo marcado como :Knowledge. Los cambios de descripción crean un nuevo nodo de cadena enlazado mediante EVOLVED_FROM.

Consulta HOWTO.xml para conocer la enseñanza orientada al operador que debe darse a un LLM como andamiaje de invariantes, y docs/design/ para el razonamiento que hay detrás de cada compromiso.

Requisitos previos

  • Python 3.10+

  • Instancia de Neo4j 5.x (local o remota)

  • uv (para el desarrollo; no es necesario para instalar)

Inicio rápido

pip install kenning-continuity

kenning-continuity --db-url bolt://localhost:7687

O desde el código fuente:

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

Configuración

Los indicadores de CLI tienen prioridad sobre las variables de entorno, que a su vez tienen prioridad sobre los valores predeterminados.

Indicador de CLI

Variable de entorno

Predeterminado

Descripción

--db-url

NEO4J_URI o NEO4J_URL

bolt://localhost:7687

URL de conexión de Neo4j

--username

NEO4J_USERNAME

neo4j

Nombre de usuario de Neo4j

--password

NEO4J_PASSWORD

password

Contraseña de Neo4j

--database

NEO4J_DATABASE

neo4j

Nombre de la base de datos de Neo4j

--transport

NEO4J_TRANSPORT

stdio

stdio, sse o streamable-http

--namespace

NEO4J_NAMESPACE

(ninguno)

Prefijo del nombre de la herramienta (p. ej. myappmyapp-begin_session)

--read-timeout

NEO4J_READ_TIMEOUT

30

Tiempo de espera de las consultas de lectura, en segundos

--server-host

NEO4J_MCP_SERVER_HOST

127.0.0.1

Host HTTP (transportes no stdio)

--server-port

NEO4J_MCP_SERVER_PORT

8000

Puerto HTTP (transportes no stdio)

--server-path

NEO4J_MCP_SERVER_PATH

/mcp/

Ruta HTTP (transportes no stdio)

--allow-origins

NEO4J_MCP_SERVER_ALLOW_ORIGINS

(ninguno)

Orígenes CORS separados por comas

--allowed-hosts

NEO4J_MCP_SERVER_ALLOWED_HOSTS

(ninguno)

Hosts permitidos separados por comas; protección contra el reenlace de DNS

Configuración del cliente MCP

Claude Desktop / Claude Code

{
  "mcpServers": {
    "temporal-knowledge": {
      "command": "kenning-continuity",
      "args": ["--db-url", "bolt://localhost:7687"]
    }
  }
}

Transporte HTTP

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"

Superficie de herramientas (23 herramientas)

Una sesión se desarrolla así: create_domain (una vez) → begin_session → crear / evolucionar / confirmar / conectar conocimiento → end_session.

El servidor no tiene estado. begin_session devuelve un session_id que el cliente pasa a todas las herramientas de conocimiento posteriores. Una sesión que nunca se cierra permanece active, por diseño.

Proceso (4)

Herramienta

Descripción

list_domains

Todos los dominios con recuentos de sesiones y última actividad

create_domain

Crear un dominio de conocimiento (idempotente)

begin_session

Inicia una sesión; devuelve session_id. domain, purpose, director y director_key son todos obligatorios: el nodo Person del director se crea aquí y en ningún otro sitio

end_session

Cierra una sesión con un resumen de lo aprendido

begin_session devuelve un recuento por tipo, no el estado del dominio. Devolver el estado en línea suponía 600,820 caracteres en un dominio de producción — aproximadamente 150k tokens gastados antes de que la sesión hubiera hecho una pregunta. Llama a get_domain_state con types y limit para la parte que realmente necesitas.

Mutación de conocimiento (6)

Herramienta

Descripción

create_knowledge

Crea entidades. Rechaza las colisiones, rechaza los tipos de proceso y rechaza los campos desconocidos en lugar de descartarlos

evolve_knowledge

La única forma de cambiar una descripción. Crea un nuevo nodo de cadena que conserva el anterior mediante EVOLVED_FROM; mantiene el tipo ontológico y reemplaza el conjunto de subetiquetas

confirm_knowledge

Registra que las entidades fueron revisadas y se encontraron sin cambios

merge_knowledge

Compactar una cadena EVOLVED_FROM en un único nodo canónico. Destructivo: no se puede deshacer

create_connections

Enlaza entidades. Toma un session_id y lo registra en cada arista: una arista es una afirmación y llega hasta su autor

claim_referent

Afirma que dos referentes son lo mismo, con una resolution obligatoria: proposed, confirmed o distinct

Consulta (5)

Herramienta

Descripción

search_knowledge

Texto completo en nombres y descripciones, solo cabeza de cadena

get_domain_state

Entidades actuales de un dominio; types, limit y descriptions opcionales

get_session_history

Quién trabajó en qué, cuándo y con qué propósito

get_chain_history

Recorre EVOLVED_FROM hacia atrás: lo que se entendía anteriormente

read_cypher

Vía de escape Cypher de solo lectura; las escrituras se rechazan

Taxonomía (2)

Herramienta

Descripción

list_knowledge_types

11 tipos ontológicos y 7 subetiquetas, con el retículo

list_connection_types

13 tipos de arista de conocimiento y 5 de proceso

Análisis de grafos (6)

Herramienta

Descripción

gds_create_projection

Crear una proyección de grafo GDS

gds_drop_projection

Eliminar una proyección

gds_pagerank

Centralidad PageRank

gds_betweenness

Centralidad de intermediación: nodos puente

gds_louvain

Detección de comunidades Louvain

gds_wcc

Componentes débilmente conexos

Sistema de tipos

Todo nodo de conocimiento lleva :Knowledge, exactamente una etiqueta ontológica, una propiedad ont_type que nombra esa etiqueta de manera determinista y cero o más subetiquetas mediante el multietiquetado de Neo4j.

Tipo ontológico

Qué es

Actor

Aquello que actúa; tiene agencia

Structure

Disposición sin agencia; forma persistente

Artifact

Cosa producida que persiste y puede ser referenciada

Place

Un sitio, campus, región o extensión — siempre un referente, nunca un referidor

Event

Acontecimiento localizado temporalmente

Insight

Una revelación, un descubrimiento, un avance

Pattern

Estructura recurrente reconocida a través de instancias

Challenge

Obstáculo en tiempo presente

Solution

Resolución que funcionó; se empareja con Challenge

Lesson

Regla derivada de la experiencia

Rationale

La razón detrás de algo

Las sub-etiquetas son una retícula, no un mapa plano

PersonReferent → Actor          System        → Structure
Organization   → Actor          Process       → Structure
Team           → Organization → Actor         Configuration → Structure
                                              Service       → Structure

create_knowledge acepta un tipo ontológico (Actor) o una sub-etiqueta (Team), y aplica la cadena completa: :Knowledge:Actor:Organization:Team. Por lo tanto, una consulta de organizaciones encuentra equipos. Un mapa plano emitiría :Actor:Team, descartando silenciosamente el nivel intermedio, y nada lo reportaría.

Tipos de conexión (13)

EVOLVED_FROM, ENABLING, REQUIRING, INFORMING, CAUSING, COMPOSING, EXTENDING, RECOGNITION, VALIDATION, INVALIDATING, ASSOCIATED_WITH, SITUATED_AT, REFERENT_CLAIM.

Los bordes de proceso — HAS_SESSION, NEXT_SESSION, DIRECTED, DISCOVERED, CONFIRMED — solo los escriben las herramientas de proceso y no pueden crearse mediante create_connections.

Qué debe decir una descripción

Una descripción dice lo que la entidad es, no lo que le sucedió o lo que sucedió a su alrededor. Las observaciones temporales pertenecen a los nodos Event alcanzados por bordes.

  • Correcto, para un Actor:PersonReferent: "Fundador de lululemon. Mayor accionista individual (8,4%). Presentado bajo Schedule 13D — no pasivo."

  • Incorrecto: "SCHEDULE 13D/A Enmienda n.º 10 presentada el 8 de octubre de 2025. WILSON SE HACE PÚBLICO…"

La presentación es un Event. Wilson es el fundador. Que la presentación revele algo sobre él es un borde INFORMING. Su descripción debería sobrevivir sin cambios a cualquier número de presentaciones futuras, a menos que su identidad misma cambie.

Desarrollo

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

Un defecto que vive en una consulta Cypher es invisible para las pruebas unitarias — simulan el sustrato, y un error de fabricación de bordes llegó a pasarlas todas de forma idéntica antes y después de la corrección. Cualquier cosa que toque una consulta pertenece a tests/integration/.

Licencia y atribución

Licenciado bajo la Apache License, Version 2.0. Úsalo, modifícalo, ejecútalo en producción, comercialmente o de cualquier otra forma.

El trabajo aquí es la ontología — la retícula de tipos, la resolución por recorrido, la colocación de la posición epistémica en los bordes, el principio de que cada invariante vive en una herramienta. Eso se entrega libremente, y Apache-2.0 solo pide que la atribución viaje con ello: conserva LICENSE y NOTICE, y marca lo que cambiaste.

El nombre Kenning AI no forma parte de esa concesión (Apache-2.0 §6). Consulta TRADEMARKS.md para saber qué puedes hacer sin pedir permiso — que es casi todo, incluido decir sobre qué está construido tu software.

Contacto

contact@kenningai.com — sin formularios, sin embudos, nos llega directamente.

Estamos especialmente interesados en escuchar a cualquiera que haya ejecutado un sistema de memoria acumulativa a escala y haya formado una opinión sobre por qué fallan. Ese modo de fallo es la razón de casi todas las decisiones en este repositorio, y el desacuerdo de alguien que lo ha experimentado en primera persona vale más para nosotros que el acuerdo de quien no lo ha hecho.


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