Skip to main content
Glama
kenningai

temporal-knowledge

by kenningai

Непрерывность знаний (Kenning Continuity)

Корпоративные знания, которые накапливаются, а не деградируют.

MCP-сервер, позволяющий LLM-агентам накапливать организационные знания между сеансами, ограниченные по доменам, на базе Neo4j. Каждый структурный инвариант обеспечивается инструментом, а не запрашивается в инструкции, и никакой необработанный Cypher-запрос на запись не предоставляется — поэтому граф не может повредить себя, что бы модель ни решила сделать.

Он работает в производстве в масштабе предприятия: 37 доменов, 376 сеансов и более 3000 сущностей знаний, накопленных за четыре месяца ежедневного использования.

Почему он не деградирует по мере заполнения

Большинство накопительных систем памяти терпят неудачу одним из двух способов. Они конфабулируют с первого дня, потому что ничто не отличает наблюдаемый факт от факта, выведенного моделью, пытающейся быть полезной. Либо они переживают демо, а затем деградируют под нагрузкой, потому что каждая запись — это неограниченное добавление, и хранилище медленно заполняется почти дубликатами, тихими перезаписями и утверждениями, которые никто не может проследить до автора.

Четыре обязательства, все обеспечиваются структурно:

Ничто не перезаписывается. Нет ни update_knowledge, ни retype_knowledge. Изменение того, что известно о сущности, создаёт новый узел, связанный с предшественником через EVOLVED_FROM. Прежнее понимание по-прежнему существует, по-прежнему читаемо, по-прежнему атрибутировано. Более ранняя ошибка — это факт о записи, а не то, что следует стереть из неё.

Каждое утверждение достигает своего автора за два перехода. Сущность знания обнаруживается Session; Session направляется Person. Оба ребра записываются инструментами, которые отказываются работать без реального руководителя. Поэтому «кто это сказал, когда и с какой целью» всегда можно установить — не по соглашению, а потому что не существует пути кода, который создаёт знание без этого.

Идентичность никогда не выводится из строки. Семнадцать узлов с именем «Alice Example» в одиннадцати доменах — это семнадцать актов ссылки, корректно различных. Утверждение, что два из них — один человек, является утверждением, которое кто-то делает в сеансе, записанным как REFERENT_CLAIM, способным нести значение distinct — потому что система, в которой нет места для записи ответа нет, будет бесконечно задавать один и тот же вопрос. Сопоставление идентичности по строкам — это то, где большинство графов знаний тихо начинают лгать.

Структура несёт факты; свойства не дублируют их. Сущность знания не содержит свойства domain. Она помещается в домен сеансом, который её обнаружил, и достигается оттуда обходом. Свойство, которое предшествовало этому, дрейфовало — именно так денормализации и делают: 21 сущность несла строку domain, указывающую на реальный домен, к которому не было пути. Факт, хранящийся как текст рядом со структурой, а не через неё, — это факт, который в конечном итоге разойдётся со структурой.

Поле confidence отсутствует намеренно. Уверенность кого-то в конкретном случае — это факт об их опыте и не передаётся; более поздний читатель выводит свою собственную уверенность из описания, сопоставляя его с тем, что он знает. То, к чему стремятся оценки уверенности, передаётся рёбрами, которые любой читатель может оценить: VALIDATION, INVALIDATING и Challenge без парного Solution.

Если вы сами сталкивались с этими стенами при эксплуатации накопительной системы памяти в масштабе, мы хотим услышать вас.

Related MCP server: Neo4j Agent Memory MCP Server

Архитектура

Процессный слой (неизменяемый) — Person → Session, внутри Domain → Session. NEXT_SESSION всегда указывает вперёд во времени, что обеспечивается инструментом. Членство в этом слое — это способность удерживать возможные будущие и измерять их по отношению к реализации; ничто здесь не является референтом.

Слой знаний (только добавление) — 11 онтологических типов и 7 под-меток, связанных 13 типами связей, каждый узел помечен :Knowledge. Изменения описания создают новый узел цепочки, связанный через EVOLVED_FROM.

См. HOWTO.xml для обучающего материала для оператора, который следует давать LLM в качестве инвариантного каркаса, и docs/design/ для обоснования каждого обязательства.

Предварительные требования

  • Python 3.10+

  • Экземпляр Neo4j 5.x (локальный или удалённый)

  • uv (для разработки; не требуется для установки)

Быстрый старт

pip install kenning-continuity

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

Или из исходников:

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

Конфигурация

Флаги CLI имеют приоритет над переменными окружения, которые имеют приоритет над значениями по умолчанию.

Флаг CLI

Переменная окружения

По умолчанию

Описание

--db-url

NEO4J_URI или NEO4J_URL

bolt://localhost:7687

URL подключения к Neo4j

--username

NEO4J_USERNAME

neo4j

Имя пользователя Neo4j

--password

NEO4J_PASSWORD

password

Пароль Neo4j

--database

NEO4J_DATABASE

neo4j

Имя базы данных Neo4j

--transport

NEO4J_TRANSPORT

stdio

stdio, sse или streamable-http

--namespace

NEO4J_NAMESPACE

(нет)

Префикс имени инструмента (например, myappmyapp-begin_session)

--read-timeout

NEO4J_READ_TIMEOUT

30

Таймаут чтения запроса, секунды

--server-host

NEO4J_MCP_SERVER_HOST

127.0.0.1

HTTP-хост (транспорты, отличные от stdio)

--server-port

NEO4J_MCP_SERVER_PORT

8000

HTTP-порт (транспорты, отличные от stdio)

--server-path

NEO4J_MCP_SERVER_PATH

/mcp/

HTTP-путь (транспорты, отличные от stdio)

--allow-origins

NEO4J_MCP_SERVER_ALLOW_ORIGINS

(нет)

Разрешённые CORS-источники через запятую

--allowed-hosts

NEO4J_MCP_SERVER_ALLOWED_HOSTS

(нет)

Разрешённые хосты через запятую, защита от DNS-rebinding

Конфигурация MCP-клиента

Claude Desktop / Claude Code

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

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"

Поверхность инструментов (23 инструмента)

Сеанс выполняется: create_domain (один раз) → begin_session → создание / эволюция / подтверждение / связывание знаний → end_session.

Сервер не хранит состояние. begin_session возвращает session_id, который клиент передаёт каждому последующему инструменту знаний. Сеанс, который никогда не закрывался, остаётся active — это задумано.

Процесс (4)

Инструмент

Описание

list_domains

Все домены с количеством сеансов и последней активностью

create_domain

Создать домен знаний (идемпотентно)

begin_session

Начать сеанс; возвращает session_id. domain, purpose, director и director_key обязательны — узел Person руководителя создаётся здесь и нигде больше

end_session

Закрыть сеанс с резюме того, что было изучено

begin_session возвращает количество по типам, а не состояние домена. Возврат состояния встроенно составлял 600 820 символов в одном производственном домене — примерно 150 тыс. токенов потрачено до того, как сеанс задал вопрос. Вызовите get_domain_state с types и limit для той части, которая вам действительно нужна.

Мутация знаний (6)

Инструмент

Описание

create_knowledge

Создание сущностей. Отказывает при коллизии, отказывает для процессных типов и отклоняет неизвестные поля, а не игнорирует их

evolve_knowledge

Единственный способ изменить описание. Создаёт новый узел цепочки, сохраняя предыдущий через EVOLVED_FROM; сохраняет онтологический тип, заменяет набор под-меток

confirm_knowledge

Записать, что сущности были проверены и найдены неизменными

merge_knowledge

Сжать цепочку EVOLVED_FROM в один канонический узел. Разрушительно — необратимо

create_connections

Связать сущности. Принимает session_id и записывает его на каждом ребре — ребро является утверждением и достигает своего автора

claim_referent

Утверждать, что два референта — одно и то же, с обязательным resolution: proposed, confirmed или distinct

Запросы (5)

Инструмент

Описание

search_knowledge

Полнотекстовый поиск по именам и описаниям, только головы цепочек

get_domain_state

Текущие сущности для домена; опционально types, limit, descriptions

get_session_history

Кто над чем работал, когда и с какой целью

get_chain_history

Обход EVOLVED_FROM назад — что было понято ранее

read_cypher

Cypher-запасной выход только для чтения; записи отклоняются

Таксономия (2)

Инструмент

Описание

list_knowledge_types

11 онтологических типов и 7 под-меток, с решёткой

list_connection_types

13 типов рёбер знаний и 5 типов процессных рёбер

Аналитика графа (6)

Инструмент

Описание

gds_create_projection

Создать проекцию графа GDS

gds_drop_projection

Удалить проекцию

gds_pagerank

Центральность PageRank

gds_betweenness

Центральность по посредничеству — узлы-мосты

gds_louvain

Обнаружение сообществ Лувена

gds_wcc

Слабосвязные компоненты

Система типов

Каждый узел знания несёт :Knowledge, ровно одну онтологическую метку, свойство ont_type, детерминированно называющее эту метку, и ноль или более под-меток через мульти-метки Neo4j.

Онтологический тип

Что это такое

Actor

То, что действует; обладает агентностью

Structure

Устройство без агентности; устойчивая форма

Artifact

Созданный объект, который сохраняется и на который можно ссылаться

Place

Место, кампус, регион или территория — всегда объект ссылки, никогда — источник ссылки

Event

Событие, локализованное во времени

Insight

Осознание, открытие, прорыв

Pattern

Повторяющаяся структура, распознаваемая в разных экземплярах

Challenge

Препятствие в настоящем времени

Solution

Решение, которое сработало; образует пару с Challenge

Lesson

Правило, выведенное из опыта

Rationale

Причина, стоящая за чем-то

Суб-метки образуют решётку, а не плоскую карту

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

create_knowledge принимает либо онтологический тип (Actor), либо суб-метку (Team) и применяет всю цепочку: :Knowledge:Actor:Organization:Team. Поэтому запрос по организациям находит команды. Плоская карта выдала бы :Actor:Team, молча отбросив средний уровень, и ничто бы об этом не сообщило.

Типы связей (13)

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

Процессные рёбра — HAS_SESSION, NEXT_SESSION, DIRECTED, DISCOVERED, CONFIRMED — записываются только процессными инструментами и не могут быть созданы через create_connections.

Что должно содержать описание

Описание говорит о том, чем сущность является, а не о том, что с ней или вокруг неё произошло. Временные наблюдения относятся к узлам Event, достижимым через рёбра.

  • Правильно, для Actor:PersonReferent: «Основатель lululemon. Крупнейший индивидуальный акционер (8,4%). Подан по форме Schedule 13D — не пассивный.»

  • Неправильно: «SCHEDULE 13D/A Amendment No. 10 filed Oct 8, 2025. WILSON GOES PUBLIC…»

Файлинг является Event. Уилсон является основателем. То, что файлинг раскрывает что-то о нём, — это ребро INFORMING. Его описание должно пережить любое количество будущих файлингов без изменений, если только не изменится сама его идентичность.

Разработка

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

Дефект, живущий в Cypher-запросе, невидим для модульных тестов — они имитируют подложку, и однажды баг в создании рёбер прошёл все тесты одинаково и до, и после исправления. Всё, что касается запросов, должно находиться в tests/integration/.

Лицензия и атрибуция

Лицензировано под Apache License, Version 2.0. Используйте, модифицируйте, запускайте в продакшене — коммерчески или иначе.

Работа здесь — это онтология: решётка типов, разрешение обходом, размещение эпистемического статуса в рёбрах, принцип, что каждый инвариант живёт в инструменте. Это отдаётся свободно, и Apache-2.0 просит лишь, чтобы атрибуция путешествовала вместе с ней: сохраняйте LICENSE и NOTICE и отмечайте, что вы изменили.

Название Kenning AI не является частью этого гранта (Apache-2.0 §6). Смотрите TRADEMARKS.md, что можно делать без разрешения, — а это почти всё, включая указание того, на чём построено ваше программное обеспечение.

Контакты

contact@kenningai.com — без форм, без воронок, письмо доходит до нас напрямую.

Нам особенно интересно услышать тех, кто запускал накопительную систему памяти в масштабе и сформировал мнение о том, почему они терпят неудачу. Этот режим отказа — причина почти каждого решения в этом репозитории, и несогласие того, кто столкнулся с этим сам, для нас ценнее, чем согласие того, кто не сталкивался.


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