temporal-knowledge
Непрерывность знаний (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 | Переменная окружения | По умолчанию | Описание |
|
|
| URL подключения к Neo4j |
|
|
| Имя пользователя Neo4j |
|
|
| Пароль Neo4j |
|
|
| Имя базы данных Neo4j |
|
|
|
|
|
| (нет) | Префикс имени инструмента (например, |
|
|
| Таймаут чтения запроса, секунды |
|
|
| HTTP-хост (транспорты, отличные от stdio) |
|
|
| HTTP-порт (транспорты, отличные от stdio) |
|
|
| HTTP-путь (транспорты, отличные от stdio) |
|
| (нет) | Разрешённые CORS-источники через запятую |
|
| (нет) | Разрешённые хосты через запятую, защита от 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)
Инструмент | Описание |
| Все домены с количеством сеансов и последней активностью |
| Создать домен знаний (идемпотентно) |
| Начать сеанс; возвращает |
| Закрыть сеанс с резюме того, что было изучено |
begin_session возвращает количество по типам, а не состояние домена.
Возврат состояния встроенно составлял 600 820 символов в одном
производственном домене — примерно 150 тыс. токенов потрачено до того, как
сеанс задал вопрос. Вызовите get_domain_state с types и limit для той
части, которая вам действительно нужна.
Мутация знаний (6)
Инструмент | Описание |
| Создание сущностей. Отказывает при коллизии, отказывает для процессных типов и отклоняет неизвестные поля, а не игнорирует их |
| Единственный способ изменить описание. Создаёт новый узел цепочки, сохраняя предыдущий через |
| Записать, что сущности были проверены и найдены неизменными |
| Сжать цепочку |
| Связать сущности. Принимает |
| Утверждать, что два референта — одно и то же, с обязательным |
Запросы (5)
Инструмент | Описание |
| Полнотекстовый поиск по именам и описаниям, только головы цепочек |
| Текущие сущности для домена; опционально |
| Кто над чем работал, когда и с какой целью |
| Обход |
| Cypher-запасной выход только для чтения; записи отклоняются |
Таксономия (2)
Инструмент | Описание |
| 11 онтологических типов и 7 под-меток, с решёткой |
| 13 типов рёбер знаний и 5 типов процессных рёбер |
Аналитика графа (6)
Инструмент | Описание |
| Создать проекцию графа GDS |
| Удалить проекцию |
| Центральность PageRank |
| Центральность по посредничеству — узлы-мосты |
| Обнаружение сообществ Лувена |
| Слабосвязные компоненты |
Система типов
Каждый узел знания несёт :Knowledge, ровно одну онтологическую метку,
свойство ont_type, детерминированно называющее эту метку, и ноль или более
под-меток через мульти-метки Neo4j.
Онтологический тип | Что это такое |
| То, что действует; обладает агентностью |
| Устройство без агентности; устойчивая форма |
| Созданный объект, который сохраняется и на который можно ссылаться |
| Место, кампус, регион или территория — всегда объект ссылки, никогда — источник ссылки |
| Событие, локализованное во времени |
| Осознание, открытие, прорыв |
| Повторяющаяся структура, распознаваемая в разных экземплярах |
| Препятствие в настоящем времени |
| Решение, которое сработало; образует пару с |
| Правило, выведенное из опыта |
| Причина, стоящая за чем-то |
Суб-метки образуют решётку, а не плоскую карту
PersonReferent → Actor System → Structure
Organization → Actor Process → Structure
Team → Organization → Actor Configuration → Structure
Service → Structurecreate_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.
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